ic/iris/
unclassified.rs

1//! Unclassified iris functionalities.
2
3use std::borrow::Cow;
4
5use derive_more::{AsMut, AsRef, From, Into};
6use nalgebra as na;
7
8use crate::Iris;
9
10/// Unclassified iris.
11#[derive(From, Clone, Copy, Debug, PartialEq, AsRef, AsMut, Into)]
12pub struct UnclassifiedIris(na::SVector<f32, 4>);
13
14impl UnclassifiedIris {
15    pub fn as_na_svec(&self) -> &na::SVector<f32, 4> {
16        &self.0
17    }
18    pub fn as_na_svec_mut(&mut self) -> &mut na::SVector<f32, 4> {
19        &mut self.0
20    }
21}
22
23// CRUD-C: Constructors
24impl From<[f32; 4]> for UnclassifiedIris {
25    fn from(value: [f32; 4]) -> Self {
26        na::SVector::from(value).into()
27    }
28}
29// CRUD-C: Conversions
30impl From<FlatUnclassifiedIris> for UnclassifiedIris {
31    fn from(record: FlatUnclassifiedIris) -> Self {
32        let arr: [f32; 4] = record.into();
33        arr.into()
34    }
35}
36// CRUD-C: Deserializers
37impl<'de> serde::Deserialize<'de> for UnclassifiedIris {
38    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
39    where
40        D: serde::Deserializer<'de>,
41    {
42        FlatUnclassifiedIris::deserialize(deserializer).map(Self::from)
43    }
44}
45
46// CRUD-R: Getters
47impl Iris for UnclassifiedIris {
48    fn sepal_length(&self) -> f32 {
49        self.0.x
50    }
51
52    fn sepal_width(&self) -> f32 {
53        self.0.y
54    }
55
56    fn petal_length(&self) -> f32 {
57        self.0.z
58    }
59
60    fn petal_width(&self) -> f32 {
61        self.0.w
62    }
63}
64
65// CRUD-R: Displayers
66impl tabled::Tabled for UnclassifiedIris {
67    const LENGTH: usize = FlatUnclassifiedIris::LENGTH;
68
69    fn headers() -> Vec<std::borrow::Cow<'static, str>> {
70        FlatUnclassifiedIris::headers()
71    }
72
73    fn fields(&self) -> Vec<std::borrow::Cow<'_, str>> {
74        FlatUnclassifiedIris::from(*self)
75            .fields()
76            .into_iter()
77            .map(Cow::into_owned)
78            .map(Cow::from)
79            .collect()
80    }
81}
82
83/// CRUD-D: Consuming conversions
84impl From<UnclassifiedIris> for [f32; 4] {
85    fn from(value: UnclassifiedIris) -> Self {
86        value.0.into()
87    }
88}
89
90pub use flat::FlatUnclassifiedIris;
91pub mod flat;