bnr_xfs/capabilities/
euro_art6_capability.rs

1use std::fmt;
2
3use crate::{create_xfs_bool, impl_xfs_struct};
4
5create_xfs_bool!(Category2, "category2", "Euro Article 6, Category 2 support");
6create_xfs_bool!(Category3, "category3", "Euro Article 6, Category 3 support");
7create_xfs_bool!(Unfit, "unfit", "Euro Article 6, Unfit classification");
8
9/// Capabilities for Euro Article 6.
10///
11/// See [Capabilities].
12#[repr(C)]
13#[derive(Clone, Copy, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
14pub struct EuroArt6Capability {
15    pub category2: Category2,
16    pub category3: Category3,
17    pub unfit: Unfit,
18}
19
20impl EuroArt6Capability {
21    /// Creates a new [EuroArt6Capability].
22    pub const fn new() -> Self {
23        Self {
24            category2: Category2::new(),
25            category3: Category3::new(),
26            unfit: Unfit::new(),
27        }
28    }
29}
30
31impl_xfs_struct!(
32    EuroArt6Capability,
33    "eurArt6Capabilities",
34    [
35        category2: Category2,
36        category3: Category3,
37        unfit: Unfit
38    ]
39);
40
41impl fmt::Display for EuroArt6Capability {
42    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
43        write!(f, "{{")?;
44        write!(f, r#""category2": {}, "#, self.category2)?;
45        write!(f, r#""category3": {}, "#, self.category3)?;
46        write!(f, r#""unfit": {}"#, self.unfit)?;
47        write!(f, "}}")
48    }
49}