polars_arrow/scalar/
binview.rs1use std::fmt::{Debug, Formatter};
2
3use super::Scalar;
4use crate::array::ViewType;
5use crate::datatypes::ArrowDataType;
6
7#[derive(PartialEq, Eq)]
9pub struct BinaryViewScalar<T: ViewType + ?Sized> {
10 value: Option<T::Owned>,
11 phantom: std::marker::PhantomData<T>,
12}
13
14impl<T: ViewType + ?Sized> Debug for BinaryViewScalar<T> {
15 fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
16 write!(f, "Scalar({:?})", self.value)
17 }
18}
19
20impl<T: ViewType + ?Sized> Clone for BinaryViewScalar<T> {
21 fn clone(&self) -> Self {
22 Self {
23 value: self.value.clone(),
24 phantom: Default::default(),
25 }
26 }
27}
28
29impl<T: ViewType + ?Sized> BinaryViewScalar<T> {
30 #[inline]
32 pub fn new(value: Option<&T>) -> Self {
33 Self {
34 value: value.map(|x| x.into_owned()),
35 phantom: std::marker::PhantomData,
36 }
37 }
38
39 #[inline]
41 pub fn value(&self) -> Option<&T> {
42 self.value.as_ref().map(|x| x.as_ref())
43 }
44}
45
46impl<T: ViewType + ?Sized> From<Option<&T>> for BinaryViewScalar<T> {
47 #[inline]
48 fn from(v: Option<&T>) -> Self {
49 Self::new(v)
50 }
51}
52
53impl<T: ViewType + ?Sized> Scalar for BinaryViewScalar<T> {
54 #[inline]
55 fn as_any(&self) -> &dyn std::any::Any {
56 self
57 }
58
59 #[inline]
60 fn is_valid(&self) -> bool {
61 self.value.is_some()
62 }
63
64 #[inline]
65 fn dtype(&self) -> &ArrowDataType {
66 if T::IS_UTF8 {
67 &ArrowDataType::Utf8View
68 } else {
69 &ArrowDataType::BinaryView
70 }
71 }
72}