difftreelog
Merge pull request #55 from messense/ascii
in: master
3 files changed
crates/jrsonnet-evaluator/src/builtin/mod.rsdiffbeforeafterboth--- a/crates/jrsonnet-evaluator/src/builtin/mod.rs
+++ b/crates/jrsonnet-evaluator/src/builtin/mod.rs
@@ -126,6 +126,8 @@
("strReplace".into(), builtin_str_replace),
("splitLimit".into(), builtin_splitlimit),
("parseJson".into(), builtin_parse_json),
+ ("asciiUpper".into(), builtin_ascii_upper),
+ ("asciiLower".into(), builtin_ascii_lower),
].iter().cloned().collect()
};
}
@@ -828,6 +830,30 @@
})
}
+fn builtin_ascii_upper(
+ context: Context,
+ _loc: Option<&ExprLocation>,
+ args: &ArgsDesc,
+) -> Result<Val> {
+ parse_args!(context, "asciiUpper", args, 1, [
+ 0, str: ty!(string) => Val::Str;
+ ], {
+ Ok(Val::Str(str.to_ascii_uppercase().into()))
+ })
+}
+
+fn builtin_ascii_lower(
+ context: Context,
+ _loc: Option<&ExprLocation>,
+ args: &ArgsDesc,
+) -> Result<Val> {
+ parse_args!(context, "asciiLower", args, 1, [
+ 0, str: ty!(string) => Val::Str;
+ ], {
+ Ok(Val::Str(str.to_ascii_lowercase().into()))
+ })
+}
+
pub fn call_builtin(
context: Context,
loc: Option<&ExprLocation>,
crates/jrsonnet-evaluator/src/lib.rsdiffbeforeafterboth1046 assert_eq!(error.error().to_string(), "assert failed: is number");1046 assert_eq!(error.error().to_string(), "assert failed: is number");1047 }1047 }10481049 #[test]1050 fn test_ascii_upper_lower() {1051 assert_eval!(r#"std.assertEqual(std.asciiUpper("aBc😀"), "ABC😀")"#);1052 assert_eval!(r#"std.assertEqual(std.asciiLower("aBc😀"), "abc😀")"#);1053 }1048}1054}10491055crates/jrsonnet-stdlib/src/std.jsonnetdiffbeforeafterboth--- a/crates/jrsonnet-stdlib/src/std.jsonnet
+++ b/crates/jrsonnet-stdlib/src/std.jsonnet
@@ -128,21 +128,9 @@
strReplace:: $intrinsic(strReplace),
- asciiUpper(str)::
- local cp = std.codepoint;
- local up_letter(c) = if cp(c) >= 97 && cp(c) < 123 then
- std.char(cp(c) - 32)
- else
- c;
- std.join('', std.map(up_letter, std.stringChars(str))),
+ asciiUpper:: $intrinsic(asciiUpper),
- asciiLower(str)::
- local cp = std.codepoint;
- local down_letter(c) = if cp(c) >= 65 && cp(c) < 91 then
- std.char(cp(c) + 32)
- else
- c;
- std.join('', std.map(down_letter, std.stringChars(str))),
+ asciiLower:: $intrinsic(asciiLower),
range:: $intrinsic(range),