--- a/crates/jrsonnet-evaluator/src/arr/mod.rs +++ b/crates/jrsonnet-evaluator/src/arr/mod.rs @@ -45,10 +45,6 @@ Some(Self::new(RepeatedArray::new(data, repeats)?)) } - pub fn chars(chars: impl Iterator) -> Self { - Self::new(CharArray(chars.collect())) - } - #[must_use] pub fn map(self, mapper: NativeFn!((Val) -> Val)) -> Self { Self::new(::new(self, ArrayMapper::Plain(mapper))) --- a/crates/jrsonnet-evaluator/src/arr/spec.rs +++ b/crates/jrsonnet-evaluator/src/arr/spec.rs @@ -97,17 +97,6 @@ } } -#[derive(Trace, Debug)] -pub struct CharArray(pub Vec); -impl ArrayCheap for CharArray { - fn len(&self) -> usize { - self.0.as_slice().len() - } - fn get(&self, index: usize) -> Option { - self.0.as_slice().get(index).map(|v| Val::string(*v)) - } -} - impl ArrayCheap for IBytes { fn len(&self) -> usize { self.as_slice().len() --- a/crates/jrsonnet-evaluator/src/typed/conversions.rs +++ b/crates/jrsonnet-evaluator/src/typed/conversions.rs @@ -463,6 +463,11 @@ impl Typed for char { const TYPE: &'static ComplexValType = &ComplexValType::Char; } +impl IntoUntyped for &char { + fn into_untyped(value: Self) -> Result { + Ok(Val::string(*value)) + } +} impl IntoUntyped for char { fn into_untyped(value: Self) -> Result { Ok(Val::string(value)) --- a/crates/jrsonnet-evaluator/src/val.rs +++ b/crates/jrsonnet-evaluator/src/val.rs @@ -266,7 +266,7 @@ pub fn to_array(self) -> ArrValue { match self { - Self::Str(s) => ArrValue::chars(s.chars()), + Self::Str(s) => s.chars().collect(), Self::Arr(arr) => arr, } } --- a/crates/jrsonnet-stdlib/src/strings.rs +++ b/crates/jrsonnet-stdlib/src/strings.rs @@ -223,7 +223,7 @@ #[builtin] pub fn builtin_string_chars(str: IStr) -> ArrValue { - ArrValue::chars(str.chars()) + str.chars().collect() } #[builtin]