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

difftreelog

Merge pull request #124 from pawelbeza/missing-std-features

Yaroslav Bolyukin2023-07-15parents: #4300764 #150dfd2.patch.diff
in: master

10 files changed

modifiedCargo.lockdiffbeforeafterboth
375 "serde",375 "serde",
376 "serde_json",376 "serde_json",
377 "serde_yaml_with_quirks",377 "serde_yaml_with_quirks",
378 "sha1",
378 "sha2",379 "sha2",
380 "sha3",
379 "structdump",381 "structdump",
380]382]
381383
387 "peg",389 "peg",
388]390]
391
392[[package]]
393name = "keccak"
394version = "0.1.4"
395source = "registry+https://github.com/rust-lang/crates.io-index"
396checksum = "8f6d5ed8676d904364de097082f4e7d240b571b67989ced0240f08b7f966f940"
397dependencies = [
398 "cpufeatures",
399]
389400
390[[package]]401[[package]]
391name = "libc"402name = "libc"
675 "yaml-rust",686 "yaml-rust",
676]687]
688
689[[package]]
690name = "sha1"
691version = "0.10.5"
692source = "registry+https://github.com/rust-lang/crates.io-index"
693checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3"
694dependencies = [
695 "cfg-if",
696 "cpufeatures",
697 "digest",
698]
677699
678[[package]]700[[package]]
679name = "sha2"701name = "sha2"
686 "digest",708 "digest",
687]709]
710
711[[package]]
712name = "sha3"
713version = "0.10.8"
714source = "registry+https://github.com/rust-lang/crates.io-index"
715checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60"
716dependencies = [
717 "digest",
718 "keccak",
719]
688720
689[[package]]721[[package]]
690name = "smallvec"722name = "smallvec"
modifiedcrates/jrsonnet-stdlib/Cargo.tomldiffbeforeafterboth
3232
33# std.md533# std.md5
34md5 = "0.7.0"34md5 = "0.7.0"
35# std.sha1
36sha1 = "0.10.5"
35# std.sha256, std.sha51237# std.sha256, std.sha512
36sha2 = "0.10.6"38sha2 = "0.10.6"
39# std.sha3
40sha3 = "0.10.8"
37# std.base6441# std.base64
38base64 = "0.21.0"42base64 = "0.21.0"
39# std.parseJson43# std.parseJson
modifiedcrates/jrsonnet-stdlib/src/arrays.rsdiffbeforeafterboth
254 Ok(Val::Num(arr.iter().sum::<f64>() / (arr.len() as f64)))254 Ok(Val::Num(arr.iter().sum::<f64>() / (arr.len() as f64)))
255}255}
256
257#[builtin]
258pub fn builtin_remove_at(
259 arr: ArrValue,
260 index: usize,
261) -> Result<ArrValue> {
262 let newArrLeft = arr.clone().slice(None, Some(index), None);
263 let newArrRight = arr.clone().slice(Some(index + 1), None, None);
264 return Ok(ArrValue::extended(
265 newArrLeft.unwrap_or(ArrValue::empty()),
266 newArrRight.unwrap_or(ArrValue::empty()))
267 );
268}
269
270#[builtin]
271pub fn builtin_remove(arr: ArrValue, elem: Val) -> Result<ArrValue> {
272 for (index, item) in arr.iter().enumerate() {
273 if equals(&item?, &elem)? {
274 return builtin_remove_at(arr.clone(), index)
275 }
276 }
277 Ok(arr)
278}
256279
modifiedcrates/jrsonnet-stdlib/src/hash.rsdiffbeforeafterboth
17 format!("{:x}", sha2::Sha512::digest(s.as_bytes()))17 format!("{:x}", sha2::Sha512::digest(s.as_bytes()))
18}18}
19
20#[builtin]
21pub fn builtin_sha1(s: IStr) -> String {
22 use sha1::digest::Digest;
23 format!("{:x}", sha1::Sha1::digest(s.as_bytes()))
24}
25
26#[builtin]
27pub fn builtin_sha3(s: IStr) -> String {
28 use sha3::digest::Digest;
29 format!("{:x}", sha3::Sha3_512::digest(s.as_bytes()))
30}
1931
modifiedcrates/jrsonnet-stdlib/src/lib.rsdiffbeforeafterboth
83 ("contains", builtin_member::INST),83 ("contains", builtin_member::INST),
84 ("count", builtin_count::INST),84 ("count", builtin_count::INST),
85 ("avg", builtin_avg::INST),85 ("avg", builtin_avg::INST),
86 ("removeAt", builtin_remove_at::INST),
87 ("remove", builtin_remove::INST),
86 // Math88 // Math
87 ("abs", builtin_abs::INST),89 ("abs", builtin_abs::INST),
88 ("sign", builtin_sign::INST),90 ("sign", builtin_sign::INST),
104 ("exp", builtin_exp::INST),106 ("exp", builtin_exp::INST),
105 ("mantissa", builtin_mantissa::INST),107 ("mantissa", builtin_mantissa::INST),
106 ("exponent", builtin_exponent::INST),108 ("exponent", builtin_exponent::INST),
109 ("round", builtin_round::INST),
110 ("isEven", builtin_is_even::INST),
111 ("isOdd", builtin_is_odd::INST),
112 ("isInteger", builtin_is_integer::INST),
113 ("isDecimal", builtin_is_decimal::INST),
107 // Operator114 // Operator
108 ("mod", builtin_mod::INST),115 ("mod", builtin_mod::INST),
109 ("primitiveEquals", builtin_primitive_equals::INST),116 ("primitiveEquals", builtin_primitive_equals::INST),
110 ("equals", builtin_equals::INST),117 ("equals", builtin_equals::INST),
111 ("xor", builtin_xor::INST),118 ("xor", builtin_xor::INST),
119 ("xnor", builtin_xnor::INST),
112 ("format", builtin_format::INST),120 ("format", builtin_format::INST),
113 // Sort121 // Sort
114 ("sort", builtin_sort::INST),122 ("sort", builtin_sort::INST),
118 ("maxArray", builtin_max_array::INST),126 ("maxArray", builtin_max_array::INST),
119 // Hash127 // Hash
120 ("md5", builtin_md5::INST),128 ("md5", builtin_md5::INST),
129 ("sha1", builtin_sha1::INST),
121 ("sha256", builtin_sha256::INST),130 ("sha256", builtin_sha256::INST),
122 ("sha512", builtin_sha512::INST),131 ("sha512", builtin_sha512::INST),
132 ("sha3", builtin_sha3::INST),
123 // Encoding133 // Encoding
124 ("encodeUTF8", builtin_encode_utf8::INST),134 ("encodeUTF8", builtin_encode_utf8::INST),
125 ("decodeUTF8", builtin_decode_utf8::INST),135 ("decodeUTF8", builtin_decode_utf8::INST),
129 // Objects139 // Objects
130 ("objectFieldsEx", builtin_object_fields_ex::INST),140 ("objectFieldsEx", builtin_object_fields_ex::INST),
131 ("objectHasEx", builtin_object_has_ex::INST),141 ("objectHasEx", builtin_object_has_ex::INST),
142 ("objectRemoveKey", builtin_object_remove_key::INST),
132 // Manifest143 // Manifest
133 ("escapeStringJson", builtin_escape_string_json::INST),144 ("escapeStringJson", builtin_escape_string_json::INST),
134 ("manifestJsonEx", builtin_manifest_json_ex::INST),145 ("manifestJsonEx", builtin_manifest_json_ex::INST),
142 ("substr", builtin_substr::INST),153 ("substr", builtin_substr::INST),
143 ("char", builtin_char::INST),154 ("char", builtin_char::INST),
144 ("strReplace", builtin_str_replace::INST),155 ("strReplace", builtin_str_replace::INST),
156 ("isEmpty", builtin_is_empty::INST),
157 ("equalsIgnoreCase", builtin_equals_ignore_case::INST),
145 ("splitLimit", builtin_splitlimit::INST),158 ("splitLimit", builtin_splitlimit::INST),
146 ("asciiUpper", builtin_ascii_upper::INST),159 ("asciiUpper", builtin_ascii_upper::INST),
147 ("asciiLower", builtin_ascii_lower::INST),160 ("asciiLower", builtin_ascii_lower::INST),
modifiedcrates/jrsonnet-stdlib/src/math.rsdiffbeforeafterboth
115 frexp(x).1115 frexp(x).1
116}116}
117
118#[builtin]
119pub fn builtin_round(x: f64) -> f64 {
120 x.round()
121}
122
123#[builtin]
124pub fn builtin_is_even(x: f64) -> bool {
125 builtin_round(x) % 2.0 == 0.0
126}
127
128#[builtin]
129pub fn builtin_is_odd(x: f64) -> bool {
130 builtin_round(x) % 2.0 == 1.0
131}
132
133#[builtin]
134pub fn builtin_is_integer(x: f64) -> bool {
135 builtin_round(x) == x
136}
137
138#[builtin]
139pub fn builtin_is_decimal(x: f64) -> bool {
140 builtin_round(x) != x
141}
117142
modifiedcrates/jrsonnet-stdlib/src/objects.rsdiffbeforeafterboth
1use jrsonnet_evaluator::{1use jrsonnet_evaluator::{
2 function::builtin,2 function::builtin,
3 val::{StrValue, Val},3 val::{StrValue, Val},
4 IStr, ObjValue,4 IStr, ObjValue, ObjValueBuilder,
5};5};
6
67
28 obj.has_field_ex(fname, hidden)29 obj.has_field_ex(fname, hidden)
29}30}
31
32#[builtin]
33pub fn builtin_object_remove_key(obj: ObjValue, key: IStr) -> ObjValue {
34 let mut new_obj = ObjValueBuilder::with_capacity(obj.len() - 1);
35 for (k, v) in obj.iter() {
36 if k == key {
37 continue
38 }
39 new_obj.member(k).value_unchecked(v.unwrap())
40 }
41
42 new_obj.build()
43}
3044
modifiedcrates/jrsonnet-stdlib/src/operator.rsdiffbeforeafterboth
38 x ^ y38 x ^ y
39}39}
40
41#[builtin]
42pub fn builtin_xnor(x: bool, y: bool) -> bool {
43 x == y
44}
4045
41#[builtin]46#[builtin]
42pub fn builtin_format(str: IStr, vals: Val) -> Result<String> {47pub fn builtin_format(str: IStr, vals: Val) -> Result<String> {
modifiedcrates/jrsonnet-stdlib/src/std.jsonnetdiffbeforeafterboth
274 objectValuesAll(o)::274 objectValuesAll(o)::
275 [o[k] for k in std.objectFieldsAll(o)],275 [o[k] for k in std.objectFieldsAll(o)],
276276
277 objectKeysValues(o)::
278 [{ key: k, value: o[k] } for k in std.objectFields(o)],
279
280 objectKeysValuesAll(o)::
281 [{ key: k, value: o[k] } for k in std.objectFieldsAll(o)],
282
277 resolvePath(f, r)::283 resolvePath(f, r)::
278 local arr = std.split(f, '/');284 local arr = std.split(f, '/');
279 std.join('/', std.makeArray(std.length(arr) - 1, function(i) arr[i]) + [r]),285 std.join('/', std.makeArray(std.length(arr) - 1, function(i) arr[i]) + [r]),
modifiedcrates/jrsonnet-stdlib/src/strings.rsdiffbeforeafterboth
27 str.replace(&from as &str, &to as &str)27 str.replace(&from as &str, &to as &str)
28}28}
29
30#[builtin]
31pub fn builtin_is_empty(str: String) -> bool {
32 str.is_empty()
33}
34
35#[builtin]
36pub fn builtin_equals_ignore_case(x: String, y: String) -> bool {
37 x.to_ascii_lowercase() == y.to_ascii_lowercase()
38}
2939
30#[builtin]40#[builtin]
31pub fn builtin_splitlimit(str: IStr, c: IStr, maxsplits: Either![usize, M1]) -> ArrValue {41pub fn builtin_splitlimit(str: IStr, c: IStr, maxsplits: Either![usize, M1]) -> ArrValue {