vortex_scalar/scalar_value/
utf8.rs1use 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}