diff --git a/sjsonnet/src/sjsonnet/Std.scala b/sjsonnet/src/sjsonnet/Std.scala index 92a41f16..68e9835f 100644 --- a/sjsonnet/src/sjsonnet/Std.scala +++ b/sjsonnet/src/sjsonnet/Std.scala @@ -1,6 +1,7 @@ package sjsonnet import java.io.StringWriter +import java.nio.charset.StandardCharsets.UTF_8 import java.util.Base64 import sjsonnet.Expr.Member.Visibility @@ -483,6 +484,13 @@ object Std { Val.Arr(Base64.getDecoder().decode(s).map(i => Val.Lazy(Val.Num(i)))) }, + builtin("encodeUTF8", "s"){ (ev, fs, s: String) => + Val.Arr(s.getBytes(UTF_8).map(i => Val.Lazy(Val.Num(i & 0xff)))) + }, + builtin("decodeUTF8", "arr"){ (ev, fs, arr: Val.Arr) => + new String(arr.value.map(_.force.cast[Val.Num].value.toByte).toArray, UTF_8) + }, + builtinWithDefaults("uniq", "arr" -> None, "keyF" -> Some(Expr.False(0))) { (args, ev) => val arr = args("arr") val keyF = args("keyF") diff --git a/sjsonnet/test/resources/test_suite/stdlib.jsonnet b/sjsonnet/test/resources/test_suite/stdlib.jsonnet index 25abd22d..e8ed6a64 100644 --- a/sjsonnet/test/resources/test_suite/stdlib.jsonnet +++ b/sjsonnet/test/resources/test_suite/stdlib.jsonnet @@ -327,6 +327,9 @@ std.assertEqual(std.base64Decode('SGVsbG8gV29ybGQ='), 'Hello World') && std.assertEqual(std.base64Decode('SGVsbG8gV29ybA=='), 'Hello Worl') && std.assertEqual(std.base64Decode(''), '') && +std.assertEqual(std.decodeUTF8([36, 194, 162, 224, 164, 185, 226, 130, 172, 240, 144, 141, 136]), '\u0024\u00a2\u0939\u20AC\uD800\uDF48') && +std.assertEqual(std.encodeUTF8('\u0024\u00a2\u0939\u20AC\uD800\uDF48'), [36, 194, 162, 224, 164, 185, 226, 130, 172, 240, 144, 141, 136]) && + std.assertEqual(std.sort([]), []) && std.assertEqual(std.sort([1]), [1]) && std.assertEqual(std.sort([1, 2]), [1, 2]) &&