difftreelog
feat std.decodeUTF8 builtin
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
@@ -112,6 +112,7 @@
("range".into(), builtin_range),
("char".into(), builtin_char),
("encodeUTF8".into(), builtin_encode_utf8),
+ ("decodeUTF8".into(), builtin_decode_utf8),
("md5".into(), builtin_md5),
("base64".into(), builtin_base64),
("base64DecodeBytes".into(), builtin_base64_decode_bytes),
@@ -585,6 +586,23 @@
})
}
+fn builtin_decode_utf8(
+ context: Context,
+ _loc: Option<&ExprLocation>,
+ args: &ArgsDesc,
+) -> Result<Val> {
+ parse_args!(context, "decodeUTF8", args, 1, [
+ 0, arr: ty!((Array<ubyte>)) => Val::Arr;
+ ], {
+ let data: Result<Vec<u8>> = arr.iter().map(|v| v.map(|v| match v{
+ Val::Num(n) => n as u8,
+ _ => unreachable!(),
+ })).collect();
+ let data = data?;
+ Ok(Val::Str(String::from_utf8(data).map_err(|_| RuntimeError("bad utf8".into()))?.into()))
+ })
+}
+
fn builtin_md5(context: Context, _loc: Option<&ExprLocation>, args: &ArgsDesc) -> Result<Val> {
parse_args!(context, "md5", args, 1, [
0, str: ty!(string) => Val::Str;
crates/jrsonnet-stdlib/src/std.jsonnetdiffbeforeafterboth18 filter:: $intrinsic(filter),18 filter:: $intrinsic(filter),19 char:: $intrinsic(char),19 char:: $intrinsic(char),20 encodeUTF8:: $intrinsic(encodeUTF8),20 encodeUTF8:: $intrinsic(encodeUTF8),21 decodeUTF8:: $intrinsic(decodeUTF8),21 md5:: $intrinsic(md5),22 md5:: $intrinsic(md5),22 trace:: $intrinsic(trace),23 trace:: $intrinsic(trace),23 id:: $intrinsic(id),24 id:: $intrinsic(id),crates/jrsonnet-types/src/lib.rsdiffbeforeafterboth--- a/crates/jrsonnet-types/src/lib.rs
+++ b/crates/jrsonnet-types/src/lib.rs
@@ -8,6 +8,9 @@
((Array<number>)) => {{
$crate::ComplexValType::ArrayRef(&$crate::ComplexValType::Simple($crate::ValType::Num))
}};
+ ((Array<ubyte>)) => {{
+ $crate::ComplexValType::ArrayRef(&$crate::ComplexValType::BoundedNumber(Some(0.0), Some(255.0)))
+ }};
(array) => {
$crate::ComplexValType::Simple($crate::ValType::Arr)
};