difftreelog
feat std.decodeUTF8 builtin
in: master
3 files changed
crates/jrsonnet-evaluator/src/builtin/mod.rsdiffbeforeafterboth112 ("range".into(), builtin_range),112 ("range".into(), builtin_range),113 ("char".into(), builtin_char),113 ("char".into(), builtin_char),114 ("encodeUTF8".into(), builtin_encode_utf8),114 ("encodeUTF8".into(), builtin_encode_utf8),115 ("decodeUTF8".into(), builtin_decode_utf8),115 ("md5".into(), builtin_md5),116 ("md5".into(), builtin_md5),116 ("base64".into(), builtin_base64),117 ("base64".into(), builtin_base64),117 ("base64DecodeBytes".into(), builtin_base64_decode_bytes),118 ("base64DecodeBytes".into(), builtin_base64_decode_bytes),585 })586 })586}587}588589fn builtin_decode_utf8(590 context: Context,591 _loc: Option<&ExprLocation>,592 args: &ArgsDesc,593) -> Result<Val> {594 parse_args!(context, "decodeUTF8", args, 1, [595 0, arr: ty!((Array<ubyte>)) => Val::Arr;596 ], {597 let data: Result<Vec<u8>> = arr.iter().map(|v| v.map(|v| match v{598 Val::Num(n) => n as u8,599 _ => unreachable!(),600 })).collect();601 let data = data?;602 Ok(Val::Str(String::from_utf8(data).map_err(|_| RuntimeError("bad utf8".into()))?.into()))603 })604}587605588fn builtin_md5(context: Context, _loc: Option<&ExprLocation>, args: &ArgsDesc) -> Result<Val> {606fn builtin_md5(context: Context, _loc: Option<&ExprLocation>, args: &ArgsDesc) -> Result<Val> {589 parse_args!(context, "md5", args, 1, [607 parse_args!(context, "md5", args, 1, [crates/jrsonnet-stdlib/src/std.jsonnetdiffbeforeafterboth--- a/crates/jrsonnet-stdlib/src/std.jsonnet
+++ b/crates/jrsonnet-stdlib/src/std.jsonnet
@@ -18,6 +18,7 @@
filter:: $intrinsic(filter),
char:: $intrinsic(char),
encodeUTF8:: $intrinsic(encodeUTF8),
+ decodeUTF8:: $intrinsic(decodeUTF8),
md5:: $intrinsic(md5),
trace:: $intrinsic(trace),
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)
};