vortex_scalar/scalar_value/
utf8.rs

1use std::sync::Arc;
2
3use vortex_buffer::BufferString;
4use vortex_error::{VortexError, VortexExpect, VortexResult, vortex_err};
5
6use crate::ScalarValue;
7use crate::scalar_value::InnerScalarValue;
8
9impl<'a> TryFrom<&'a ScalarValue> for String {
10    type Error = VortexError;
11
12    fn try_from(value: &'a ScalarValue) -> Result<Self, Self::Error> {
13        Ok(value
14            .as_buffer_string()?
15            .vortex_expect("Can't convert null ScalarValue to String")
16            .to_string())
17    }
18}
19
20impl From<&str> for ScalarValue {
21    fn from(value: &str) -> Self {
22        ScalarValue(InnerScalarValue::BufferString(Arc::new(
23            value.to_string().into(),
24        )))
25    }
26}
27
28impl From<String> for ScalarValue {
29    fn from(value: String) -> Self {
30        ScalarValue(InnerScalarValue::BufferString(Arc::new(value.into())))
31    }
32}
33
34impl From<BufferString> for ScalarValue {
35    fn from(value: BufferString) -> Self {
36        ScalarValue(InnerScalarValue::BufferString(Arc::new(value)))
37    }
38}
39
40impl<'a> TryFrom<&'a ScalarValue> for BufferString {
41    type Error = VortexError;
42
43    fn try_from(scalar: &'a ScalarValue) -> VortexResult<Self> {
44        <Option<BufferString>>::try_from(scalar)?
45            .ok_or_else(|| vortex_err!("Can't extract present value from null scalar"))
46    }
47}
48
49impl<'a> TryFrom<&'a ScalarValue> for Option<BufferString> {
50    type Error = VortexError;
51
52    fn try_from(scalar: &'a ScalarValue) -> Result<Self, Self::Error> {
53        Ok(scalar.as_buffer_string()?.map(|s| s.as_ref().clone()))
54    }
55}