git.delta.rocks / jrsonnet / refs/commits / e23fa8691cef

difftreelog

feat std.decodeUTF8 builtin

Yaroslav Bolyukin2021-07-12parent: #00fce89.patch.diff
in: master

3 files changed

modifiedcrates/jrsonnet-evaluator/src/builtin/mod.rsdiffbeforeafterboth
112 ("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}
588
589fn 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}
587605
588fn 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, [
modifiedcrates/jrsonnet-stdlib/src/std.jsonnetdiffbeforeafterboth
18 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),
modifiedcrates/jrsonnet-types/src/lib.rsdiffbeforeafterboth
8 ((Array<number>)) => {{8 ((Array<number>)) => {{
9 $crate::ComplexValType::ArrayRef(&$crate::ComplexValType::Simple($crate::ValType::Num))9 $crate::ComplexValType::ArrayRef(&$crate::ComplexValType::Simple($crate::ValType::Num))
10 }};10 }};
11 ((Array<ubyte>)) => {{
12 $crate::ComplexValType::ArrayRef(&$crate::ComplexValType::BoundedNumber(Some(0.0), Some(255.0)))
13 }};
11 (array) => {14 (array) => {
12 $crate::ComplexValType::Simple($crate::ValType::Arr)15 $crate::ComplexValType::Simple($crate::ValType::Arr)
13 };16 };