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