re_types/blueprint/datatypes/
filter_is_not_null.rs

1// DO NOT EDIT! This file was auto-generated by crates/build/re_types_builder/src/codegen/rust/api.rs
2// Based on "crates/store/re_types/definitions/rerun/blueprint/datatypes/filter_is_not_null.fbs".
3
4#![allow(unused_braces)]
5#![allow(unused_imports)]
6#![allow(unused_parens)]
7#![allow(clippy::clone_on_copy)]
8#![allow(clippy::cloned_instead_of_copied)]
9#![allow(clippy::map_flatten)]
10#![allow(clippy::needless_question_mark)]
11#![allow(clippy::new_without_default)]
12#![allow(clippy::redundant_closure)]
13#![allow(clippy::too_many_arguments)]
14#![allow(clippy::too_many_lines)]
15
16use ::re_types_core::try_serialize_field;
17use ::re_types_core::SerializationResult;
18use ::re_types_core::{ComponentBatch as _, SerializedComponentBatch};
19use ::re_types_core::{ComponentDescriptor, ComponentType};
20use ::re_types_core::{DeserializationError, DeserializationResult};
21
22/// **Datatype**: Configuration for the filter is not null feature of the dataframe view.
23///
24/// ⚠️ **This type is _unstable_ and may change significantly in a way that the data won't be backwards compatible.**
25#[derive(Clone, Debug, Default, PartialEq, Eq)]
26pub struct FilterIsNotNull {
27    /// Whether the filter by event feature is active.
28    pub active: crate::datatypes::Bool,
29
30    /// The column used when the filter by event feature is used.
31    pub column: crate::blueprint::datatypes::ComponentColumnSelector,
32}
33
34::re_types_core::macros::impl_into_cow!(FilterIsNotNull);
35
36impl ::re_types_core::Loggable for FilterIsNotNull {
37    #[inline]
38    fn arrow_datatype() -> arrow::datatypes::DataType {
39        #![allow(clippy::wildcard_imports)]
40        use arrow::datatypes::*;
41        DataType::Struct(Fields::from(vec![
42            Field::new("active", <crate::datatypes::Bool>::arrow_datatype(), false),
43            Field::new(
44                "column",
45                <crate::blueprint::datatypes::ComponentColumnSelector>::arrow_datatype(),
46                false,
47            ),
48        ]))
49    }
50
51    fn to_arrow_opt<'a>(
52        data: impl IntoIterator<Item = Option<impl Into<::std::borrow::Cow<'a, Self>>>>,
53    ) -> SerializationResult<arrow::array::ArrayRef>
54    where
55        Self: Clone + 'a,
56    {
57        #![allow(clippy::wildcard_imports)]
58        #![allow(clippy::manual_is_variant_and)]
59        use ::re_types_core::{arrow_helpers::as_array_ref, Loggable as _, ResultExt as _};
60        use arrow::{array::*, buffer::*, datatypes::*};
61        Ok({
62            let fields = Fields::from(vec![
63                Field::new("active", <crate::datatypes::Bool>::arrow_datatype(), false),
64                Field::new(
65                    "column",
66                    <crate::blueprint::datatypes::ComponentColumnSelector>::arrow_datatype(),
67                    false,
68                ),
69            ]);
70            let (somes, data): (Vec<_>, Vec<_>) = data
71                .into_iter()
72                .map(|datum| {
73                    let datum: Option<::std::borrow::Cow<'a, Self>> = datum.map(Into::into);
74                    (datum.is_some(), datum)
75                })
76                .unzip();
77            let validity: Option<arrow::buffer::NullBuffer> = {
78                let any_nones = somes.iter().any(|some| !*some);
79                any_nones.then(|| somes.into())
80            };
81            as_array_ref(StructArray::new(
82                fields,
83                vec![
84                    {
85                        let (somes, active): (Vec<_>, Vec<_>) = data
86                            .iter()
87                            .map(|datum| {
88                                let datum = datum.as_ref().map(|datum| datum.active.clone());
89                                (datum.is_some(), datum)
90                            })
91                            .unzip();
92                        let active_validity: Option<arrow::buffer::NullBuffer> = {
93                            let any_nones = somes.iter().any(|some| !*some);
94                            any_nones.then(|| somes.into())
95                        };
96                        as_array_ref(BooleanArray::new(
97                            BooleanBuffer::from(
98                                active
99                                    .into_iter()
100                                    .map(|datum| datum.map(|datum| datum.0).unwrap_or_default())
101                                    .collect::<Vec<_>>(),
102                            ),
103                            active_validity,
104                        ))
105                    },
106                    {
107                        let (somes, column): (Vec<_>, Vec<_>) = data
108                            .iter()
109                            .map(|datum| {
110                                let datum = datum.as_ref().map(|datum| datum.column.clone());
111                                (datum.is_some(), datum)
112                            })
113                            .unzip();
114                        let column_validity: Option<arrow::buffer::NullBuffer> = {
115                            let any_nones = somes.iter().any(|some| !*some);
116                            any_nones.then(|| somes.into())
117                        };
118                        {
119                            _ = column_validity;
120                            crate::blueprint::datatypes::ComponentColumnSelector::to_arrow_opt(
121                                column,
122                            )?
123                        }
124                    },
125                ],
126                validity,
127            ))
128        })
129    }
130
131    fn from_arrow_opt(
132        arrow_data: &dyn arrow::array::Array,
133    ) -> DeserializationResult<Vec<Option<Self>>>
134    where
135        Self: Sized,
136    {
137        #![allow(clippy::wildcard_imports)]
138        use ::re_types_core::{arrow_zip_validity::ZipValidity, Loggable as _, ResultExt as _};
139        use arrow::{array::*, buffer::*, datatypes::*};
140        Ok({
141            let arrow_data = arrow_data
142                .as_any()
143                .downcast_ref::<arrow::array::StructArray>()
144                .ok_or_else(|| {
145                    let expected = Self::arrow_datatype();
146                    let actual = arrow_data.data_type().clone();
147                    DeserializationError::datatype_mismatch(expected, actual)
148                })
149                .with_context("rerun.blueprint.datatypes.FilterIsNotNull")?;
150            if arrow_data.is_empty() {
151                Vec::new()
152            } else {
153                let (arrow_data_fields, arrow_data_arrays) =
154                    (arrow_data.fields(), arrow_data.columns());
155                let arrays_by_name: ::std::collections::HashMap<_, _> = arrow_data_fields
156                    .iter()
157                    .map(|field| field.name().as_str())
158                    .zip(arrow_data_arrays)
159                    .collect();
160                let active = {
161                    if !arrays_by_name.contains_key("active") {
162                        return Err(DeserializationError::missing_struct_field(
163                            Self::arrow_datatype(),
164                            "active",
165                        ))
166                        .with_context("rerun.blueprint.datatypes.FilterIsNotNull");
167                    }
168                    let arrow_data = &**arrays_by_name["active"];
169                    arrow_data
170                        .as_any()
171                        .downcast_ref::<BooleanArray>()
172                        .ok_or_else(|| {
173                            let expected = DataType::Boolean;
174                            let actual = arrow_data.data_type().clone();
175                            DeserializationError::datatype_mismatch(expected, actual)
176                        })
177                        .with_context("rerun.blueprint.datatypes.FilterIsNotNull#active")?
178                        .into_iter()
179                        .map(|res_or_opt| res_or_opt.map(crate::datatypes::Bool))
180                };
181                let column = {
182                    if !arrays_by_name.contains_key("column") {
183                        return Err(DeserializationError::missing_struct_field(
184                            Self::arrow_datatype(),
185                            "column",
186                        ))
187                        .with_context("rerun.blueprint.datatypes.FilterIsNotNull");
188                    }
189                    let arrow_data = &**arrays_by_name["column"];
190                    crate::blueprint::datatypes::ComponentColumnSelector::from_arrow_opt(arrow_data)
191                        .with_context("rerun.blueprint.datatypes.FilterIsNotNull#column")?
192                        .into_iter()
193                };
194                ZipValidity::new_with_validity(
195                    ::itertools::izip!(active, column),
196                    arrow_data.nulls(),
197                )
198                .map(|opt| {
199                    opt.map(|(active, column)| {
200                        Ok(Self {
201                            active: active
202                                .ok_or_else(DeserializationError::missing_data)
203                                .with_context("rerun.blueprint.datatypes.FilterIsNotNull#active")?,
204                            column: column
205                                .ok_or_else(DeserializationError::missing_data)
206                                .with_context("rerun.blueprint.datatypes.FilterIsNotNull#column")?,
207                        })
208                    })
209                    .transpose()
210                })
211                .collect::<DeserializationResult<Vec<_>>>()
212                .with_context("rerun.blueprint.datatypes.FilterIsNotNull")?
213            }
214        })
215    }
216}
217
218impl ::re_byte_size::SizeBytes for FilterIsNotNull {
219    #[inline]
220    fn heap_size_bytes(&self) -> u64 {
221        self.active.heap_size_bytes() + self.column.heap_size_bytes()
222    }
223
224    #[inline]
225    fn is_pod() -> bool {
226        <crate::datatypes::Bool>::is_pod()
227            && <crate::blueprint::datatypes::ComponentColumnSelector>::is_pod()
228    }
229}