vortex_scalar/scalar_value/
utf8.rs

1// SPDX-License-Identifier: Apache-2.0
2// SPDX-FileCopyrightText: Copyright the Vortex contributors
3
4use 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}