vortex_scalar/scalarvalue/
list.rs1use std::sync::Arc;
2
3use vortex_buffer::{BufferString, ByteBuffer};
4use vortex_dtype::half::f16;
5use vortex_error::{VortexError, vortex_err};
6
7use crate::ScalarValue;
8use crate::scalarvalue::InnerScalarValue;
9
10impl<'a, T: for<'b> TryFrom<&'b ScalarValue, Error = VortexError>> TryFrom<&'a ScalarValue>
11 for Vec<T>
12{
13 type Error = VortexError;
14
15 fn try_from(value: &'a ScalarValue) -> Result<Self, Self::Error> {
16 let value = value
17 .as_list()?
18 .ok_or_else(|| vortex_err!("Can't convert non list scalar to vec"))?;
19
20 value.iter().map(|v| T::try_from(v)).collect()
21 }
22}
23
24macro_rules! from_vec_for_scalar_value {
25 ($T:ty) => {
26 impl From<Vec<$T>> for ScalarValue {
27 fn from(value: Vec<$T>) -> Self {
28 ScalarValue(InnerScalarValue::List(
29 value
30 .into_iter()
31 .map(ScalarValue::from)
32 .collect::<Arc<[_]>>(),
33 ))
34 }
35 }
36 };
37}
38
39from_vec_for_scalar_value!(u16);
41from_vec_for_scalar_value!(u32);
42from_vec_for_scalar_value!(u64);
43from_vec_for_scalar_value!(usize); from_vec_for_scalar_value!(i8);
45from_vec_for_scalar_value!(i16);
46from_vec_for_scalar_value!(i32);
47from_vec_for_scalar_value!(i64);
48from_vec_for_scalar_value!(f16);
49from_vec_for_scalar_value!(f32);
50from_vec_for_scalar_value!(f64);
51from_vec_for_scalar_value!(String);
52from_vec_for_scalar_value!(BufferString);
53from_vec_for_scalar_value!(ByteBuffer);