vortex_scalar/scalar_value/
binary.rs

1// SPDX-License-Identifier: Apache-2.0
2// SPDX-FileCopyrightText: Copyright the Vortex contributors
3
4use std::sync::Arc;
5
6use vortex_buffer::ByteBuffer;
7use vortex_error::{VortexError, VortexExpect, VortexResult};
8
9use crate::ScalarValue;
10use crate::scalar_value::InnerScalarValue;
11
12impl<'a> TryFrom<&'a ScalarValue> for ByteBuffer {
13    type Error = VortexError;
14
15    fn try_from(scalar: &'a ScalarValue) -> VortexResult<Self> {
16        Ok(scalar
17            .as_buffer()?
18            .vortex_expect("Can't convert null scalar into a byte buffer")
19            .as_ref()
20            .clone())
21    }
22}
23
24impl<'a> TryFrom<&'a ScalarValue> for Option<ByteBuffer> {
25    type Error = VortexError;
26
27    fn try_from(scalar: &'a ScalarValue) -> VortexResult<Self> {
28        Ok(scalar.as_buffer()?.as_ref().map(|b| b.as_ref().clone()))
29    }
30}
31
32impl From<&[u8]> for ScalarValue {
33    fn from(value: &[u8]) -> Self {
34        ScalarValue::from(ByteBuffer::from(value.to_vec()))
35    }
36}
37
38impl From<ByteBuffer> for ScalarValue {
39    fn from(value: ByteBuffer) -> Self {
40        ScalarValue(InnerScalarValue::Buffer(Arc::new(value)))
41    }
42}