#![allow(trivial_numeric_casts)]
#![allow(unused_parens)]
#![allow(clippy::clone_on_copy)]
#![allow(clippy::iter_on_single_items)]
#![allow(clippy::map_flatten)]
#![allow(clippy::match_wildcard_for_single_variants)]
#![allow(clippy::needless_question_mark)]
#![allow(clippy::redundant_closure)]
#![allow(clippy::too_many_arguments)]
#![allow(clippy::too_many_lines)]
#![allow(clippy::unnecessary_cast)]
#[derive(Clone, Debug, PartialEq)]
pub struct Points3D {
pub points: Vec<crate::components::Point3D>,
pub radii: Option<Vec<crate::components::Radius>>,
pub colors: Option<Vec<crate::components::Color>>,
pub labels: Option<Vec<crate::components::Label>>,
pub class_ids: Option<Vec<crate::components::ClassId>>,
pub keypoint_ids: Option<Vec<crate::components::KeypointId>>,
pub instance_keys: Option<Vec<crate::components::InstanceKey>>,
}
static REQUIRED_COMPONENTS: once_cell::sync::Lazy<[crate::ComponentName; 1usize]> =
once_cell::sync::Lazy::new(|| ["rerun.point3d".into()]);
static RECOMMENDED_COMPONENTS: once_cell::sync::Lazy<[crate::ComponentName; 2usize]> =
once_cell::sync::Lazy::new(|| ["rerun.radius".into(), "rerun.colorrgba".into()]);
static OPTIONAL_COMPONENTS: once_cell::sync::Lazy<[crate::ComponentName; 4usize]> =
once_cell::sync::Lazy::new(|| {
[
"rerun.label".into(),
"rerun.class_id".into(),
"rerun.keypoint_id".into(),
"rerun.instance_key".into(),
]
});
static ALL_COMPONENTS: once_cell::sync::Lazy<[crate::ComponentName; 7usize]> =
once_cell::sync::Lazy::new(|| {
[
"rerun.point3d".into(),
"rerun.radius".into(),
"rerun.colorrgba".into(),
"rerun.label".into(),
"rerun.class_id".into(),
"rerun.keypoint_id".into(),
"rerun.instance_key".into(),
]
});
impl Points3D {
pub const NUM_COMPONENTS: usize = 7usize;
}
impl crate::Archetype for Points3D {
#[inline]
fn name() -> crate::ArchetypeName {
crate::ArchetypeName::Borrowed("rerun.archetypes.Points3D")
}
#[inline]
fn required_components() -> &'static [crate::ComponentName] {
REQUIRED_COMPONENTS.as_slice()
}
#[inline]
fn recommended_components() -> &'static [crate::ComponentName] {
RECOMMENDED_COMPONENTS.as_slice()
}
#[inline]
fn optional_components() -> &'static [crate::ComponentName] {
OPTIONAL_COMPONENTS.as_slice()
}
#[inline]
fn all_components() -> &'static [crate::ComponentName] {
ALL_COMPONENTS.as_slice()
}
#[inline]
fn try_to_arrow(
&self,
) -> crate::SerializationResult<
Vec<(::arrow2::datatypes::Field, Box<dyn ::arrow2::array::Array>)>,
> {
use crate::Loggable as _;
Ok([
{
Some({
let array =
<crate::components::Point3D>::try_to_arrow(self.points.iter(), None);
array.map(|array| {
let datatype = ::arrow2::datatypes::DataType::Extension(
"rerun.components.Point3D".into(),
Box::new(array.data_type().clone()),
Some("rerun.point3d".into()),
);
(
::arrow2::datatypes::Field::new("points", datatype, false),
array,
)
})
})
.transpose()
.map_err(|err| crate::SerializationError::Context {
location: "rerun.archetypes.Points3D#points".into(),
source: Box::new(err),
})?
},
{
self.radii
.as_ref()
.map(|many| {
let array = <crate::components::Radius>::try_to_arrow(many.iter(), None);
array.map(|array| {
let datatype = ::arrow2::datatypes::DataType::Extension(
"rerun.components.Radius".into(),
Box::new(array.data_type().clone()),
Some("rerun.radius".into()),
);
(
::arrow2::datatypes::Field::new("radii", datatype, false),
array,
)
})
})
.transpose()
.map_err(|err| crate::SerializationError::Context {
location: "rerun.archetypes.Points3D#radii".into(),
source: Box::new(err),
})?
},
{
self.colors
.as_ref()
.map(|many| {
let array = <crate::components::Color>::try_to_arrow(many.iter(), None);
array.map(|array| {
let datatype = ::arrow2::datatypes::DataType::Extension(
"rerun.components.Color".into(),
Box::new(array.data_type().clone()),
Some("rerun.colorrgba".into()),
);
(
::arrow2::datatypes::Field::new("colors", datatype, false),
array,
)
})
})
.transpose()
.map_err(|err| crate::SerializationError::Context {
location: "rerun.archetypes.Points3D#colors".into(),
source: Box::new(err),
})?
},
{
self.labels
.as_ref()
.map(|many| {
let array = <crate::components::Label>::try_to_arrow(many.iter(), None);
array.map(|array| {
let datatype = ::arrow2::datatypes::DataType::Extension(
"rerun.components.Label".into(),
Box::new(array.data_type().clone()),
Some("rerun.label".into()),
);
(
::arrow2::datatypes::Field::new("labels", datatype, false),
array,
)
})
})
.transpose()
.map_err(|err| crate::SerializationError::Context {
location: "rerun.archetypes.Points3D#labels".into(),
source: Box::new(err),
})?
},
{
self.class_ids
.as_ref()
.map(|many| {
let array = <crate::components::ClassId>::try_to_arrow(many.iter(), None);
array.map(|array| {
let datatype = ::arrow2::datatypes::DataType::Extension(
"rerun.components.ClassId".into(),
Box::new(array.data_type().clone()),
Some("rerun.class_id".into()),
);
(
::arrow2::datatypes::Field::new("class_ids", datatype, false),
array,
)
})
})
.transpose()
.map_err(|err| crate::SerializationError::Context {
location: "rerun.archetypes.Points3D#class_ids".into(),
source: Box::new(err),
})?
},
{
self.keypoint_ids
.as_ref()
.map(|many| {
let array =
<crate::components::KeypointId>::try_to_arrow(many.iter(), None);
array.map(|array| {
let datatype = ::arrow2::datatypes::DataType::Extension(
"rerun.components.KeypointId".into(),
Box::new(array.data_type().clone()),
Some("rerun.keypoint_id".into()),
);
(
::arrow2::datatypes::Field::new("keypoint_ids", datatype, false),
array,
)
})
})
.transpose()
.map_err(|err| crate::SerializationError::Context {
location: "rerun.archetypes.Points3D#keypoint_ids".into(),
source: Box::new(err),
})?
},
{
self.instance_keys
.as_ref()
.map(|many| {
let array =
<crate::components::InstanceKey>::try_to_arrow(many.iter(), None);
array.map(|array| {
let datatype = ::arrow2::datatypes::DataType::Extension(
"rerun.components.InstanceKey".into(),
Box::new(array.data_type().clone()),
Some("rerun.instance_key".into()),
);
(
::arrow2::datatypes::Field::new("instance_keys", datatype, false),
array,
)
})
})
.transpose()
.map_err(|err| crate::SerializationError::Context {
location: "rerun.archetypes.Points3D#instance_keys".into(),
source: Box::new(err),
})?
},
]
.into_iter()
.flatten()
.collect())
}
#[inline]
fn try_from_arrow(
data: impl IntoIterator<Item = (::arrow2::datatypes::Field, Box<dyn ::arrow2::array::Array>)>,
) -> crate::DeserializationResult<Self> {
use crate::Loggable as _;
let arrays_by_name: ::std::collections::HashMap<_, _> = data
.into_iter()
.map(|(field, array)| (field.name, array))
.collect();
let points = {
let array = arrays_by_name
.get("points")
.ok_or_else(|| crate::DeserializationError::MissingData {
backtrace: ::backtrace::Backtrace::new_unresolved(),
})
.map_err(|err| crate::DeserializationError::Context {
location: "rerun.archetypes.Points3D#points".into(),
source: Box::new(err),
})?;
<crate::components::Point3D>::try_from_arrow_opt(&**array)
.map_err(|err| crate::DeserializationError::Context {
location: "rerun.archetypes.Points3D#points".into(),
source: Box::new(err),
})?
.into_iter()
.map(|v| {
v.ok_or_else(|| crate::DeserializationError::MissingData {
backtrace: ::backtrace::Backtrace::new_unresolved(),
})
})
.collect::<crate::DeserializationResult<Vec<_>>>()
.map_err(|err| crate::DeserializationError::Context {
location: "rerun.archetypes.Points3D#points".into(),
source: Box::new(err),
})?
};
let radii = if let Some(array) = arrays_by_name.get("radii") {
Some(
<crate::components::Radius>::try_from_arrow_opt(&**array)
.map_err(|err| crate::DeserializationError::Context {
location: "rerun.archetypes.Points3D#radii".into(),
source: Box::new(err),
})?
.into_iter()
.map(|v| {
v.ok_or_else(|| crate::DeserializationError::MissingData {
backtrace: ::backtrace::Backtrace::new_unresolved(),
})
})
.collect::<crate::DeserializationResult<Vec<_>>>()
.map_err(|err| crate::DeserializationError::Context {
location: "rerun.archetypes.Points3D#radii".into(),
source: Box::new(err),
})?,
)
} else {
None
};
let colors = if let Some(array) = arrays_by_name.get("colors") {
Some(
<crate::components::Color>::try_from_arrow_opt(&**array)
.map_err(|err| crate::DeserializationError::Context {
location: "rerun.archetypes.Points3D#colors".into(),
source: Box::new(err),
})?
.into_iter()
.map(|v| {
v.ok_or_else(|| crate::DeserializationError::MissingData {
backtrace: ::backtrace::Backtrace::new_unresolved(),
})
})
.collect::<crate::DeserializationResult<Vec<_>>>()
.map_err(|err| crate::DeserializationError::Context {
location: "rerun.archetypes.Points3D#colors".into(),
source: Box::new(err),
})?,
)
} else {
None
};
let labels = if let Some(array) = arrays_by_name.get("labels") {
Some(
<crate::components::Label>::try_from_arrow_opt(&**array)
.map_err(|err| crate::DeserializationError::Context {
location: "rerun.archetypes.Points3D#labels".into(),
source: Box::new(err),
})?
.into_iter()
.map(|v| {
v.ok_or_else(|| crate::DeserializationError::MissingData {
backtrace: ::backtrace::Backtrace::new_unresolved(),
})
})
.collect::<crate::DeserializationResult<Vec<_>>>()
.map_err(|err| crate::DeserializationError::Context {
location: "rerun.archetypes.Points3D#labels".into(),
source: Box::new(err),
})?,
)
} else {
None
};
let class_ids = if let Some(array) = arrays_by_name.get("class_ids") {
Some(
<crate::components::ClassId>::try_from_arrow_opt(&**array)
.map_err(|err| crate::DeserializationError::Context {
location: "rerun.archetypes.Points3D#class_ids".into(),
source: Box::new(err),
})?
.into_iter()
.map(|v| {
v.ok_or_else(|| crate::DeserializationError::MissingData {
backtrace: ::backtrace::Backtrace::new_unresolved(),
})
})
.collect::<crate::DeserializationResult<Vec<_>>>()
.map_err(|err| crate::DeserializationError::Context {
location: "rerun.archetypes.Points3D#class_ids".into(),
source: Box::new(err),
})?,
)
} else {
None
};
let keypoint_ids = if let Some(array) = arrays_by_name.get("keypoint_ids") {
Some(
<crate::components::KeypointId>::try_from_arrow_opt(&**array)
.map_err(|err| crate::DeserializationError::Context {
location: "rerun.archetypes.Points3D#keypoint_ids".into(),
source: Box::new(err),
})?
.into_iter()
.map(|v| {
v.ok_or_else(|| crate::DeserializationError::MissingData {
backtrace: ::backtrace::Backtrace::new_unresolved(),
})
})
.collect::<crate::DeserializationResult<Vec<_>>>()
.map_err(|err| crate::DeserializationError::Context {
location: "rerun.archetypes.Points3D#keypoint_ids".into(),
source: Box::new(err),
})?,
)
} else {
None
};
let instance_keys = if let Some(array) = arrays_by_name.get("instance_keys") {
Some(
<crate::components::InstanceKey>::try_from_arrow_opt(&**array)
.map_err(|err| crate::DeserializationError::Context {
location: "rerun.archetypes.Points3D#instance_keys".into(),
source: Box::new(err),
})?
.into_iter()
.map(|v| {
v.ok_or_else(|| crate::DeserializationError::MissingData {
backtrace: ::backtrace::Backtrace::new_unresolved(),
})
})
.collect::<crate::DeserializationResult<Vec<_>>>()
.map_err(|err| crate::DeserializationError::Context {
location: "rerun.archetypes.Points3D#instance_keys".into(),
source: Box::new(err),
})?,
)
} else {
None
};
Ok(Self {
points,
radii,
colors,
labels,
class_ids,
keypoint_ids,
instance_keys,
})
}
}
impl Points3D {
pub fn new(points: impl IntoIterator<Item = impl Into<crate::components::Point3D>>) -> Self {
Self {
points: points.into_iter().map(Into::into).collect(),
radii: None,
colors: None,
labels: None,
class_ids: None,
keypoint_ids: None,
instance_keys: None,
}
}
pub fn with_radii(
mut self,
radii: impl IntoIterator<Item = impl Into<crate::components::Radius>>,
) -> Self {
self.radii = Some(radii.into_iter().map(Into::into).collect());
self
}
pub fn with_colors(
mut self,
colors: impl IntoIterator<Item = impl Into<crate::components::Color>>,
) -> Self {
self.colors = Some(colors.into_iter().map(Into::into).collect());
self
}
pub fn with_labels(
mut self,
labels: impl IntoIterator<Item = impl Into<crate::components::Label>>,
) -> Self {
self.labels = Some(labels.into_iter().map(Into::into).collect());
self
}
pub fn with_class_ids(
mut self,
class_ids: impl IntoIterator<Item = impl Into<crate::components::ClassId>>,
) -> Self {
self.class_ids = Some(class_ids.into_iter().map(Into::into).collect());
self
}
pub fn with_keypoint_ids(
mut self,
keypoint_ids: impl IntoIterator<Item = impl Into<crate::components::KeypointId>>,
) -> Self {
self.keypoint_ids = Some(keypoint_ids.into_iter().map(Into::into).collect());
self
}
pub fn with_instance_keys(
mut self,
instance_keys: impl IntoIterator<Item = impl Into<crate::components::InstanceKey>>,
) -> Self {
self.instance_keys = Some(instance_keys.into_iter().map(Into::into).collect());
self
}
}