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