kubizone_common/
class.rs

1use std::fmt::Display;
2
3use schemars::JsonSchema;
4use serde::{Deserialize, Serialize};
5
6/// Domain Name System class.
7#[derive(
8    Default,
9    Serialize,
10    Deserialize,
11    JsonSchema,
12    Clone,
13    Copy,
14    Debug,
15    Hash,
16    PartialEq,
17    Eq,
18    PartialOrd,
19    Ord,
20)]
21pub enum Class {
22    /// Internet
23    #[default]
24    #[serde(rename = "IN")]
25    IN,
26    /// Chaos
27    #[serde(rename = "CH")]
28    CH,
29    /// Hesiod
30    #[serde(rename = "HS")]
31    HS,
32}
33
34impl Class {
35    ///  Returns true if `self` is [`Class::IN`]
36    pub fn is_internet(&self) -> bool {
37        *self == Class::IN
38    }
39
40    ///  Returns true if `self` is [`Class::CH`]
41    pub fn is_chaos(&self) -> bool {
42        *self == Class::CH
43    }
44
45    ///  Returns true if `self` is [`Class::HS`]
46    pub fn is_hesiod(&self) -> bool {
47        *self == Class::HS
48    }
49}
50
51impl Display for Class {
52    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
53        match self {
54            Class::IN => f.write_str("IN"),
55            Class::CH => f.write_str("CH"),
56            Class::HS => f.write_str("HS"),
57        }
58    }
59}
60
61#[cfg(test)]
62mod tests {
63    use serde::{Deserialize, Serialize};
64
65    use crate::Class;
66
67    #[test]
68    fn deser() {
69        #[derive(Debug, Serialize, Deserialize, PartialEq, Eq)]
70        struct ExampleStruct {
71            class: Class,
72        }
73
74        let example = vec![ExampleStruct { class: Class::IN }];
75
76        let serialized = serde_yaml::to_string(&example).unwrap();
77        println!("{serialized}");
78
79        assert_eq!(
80            serde_yaml::from_str::<Vec<ExampleStruct>>(&serialized).unwrap(),
81            example
82        );
83    }
84}