1use std::fmt::Display;
2
3use schemars::JsonSchema;
4use serde::{Deserialize, Serialize};
5
6#[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 #[default]
24 #[serde(rename = "IN")]
25 IN,
26 #[serde(rename = "CH")]
28 CH,
29 #[serde(rename = "HS")]
31 HS,
32}
33
34impl Class {
35 pub fn is_internet(&self) -> bool {
37 *self == Class::IN
38 }
39
40 pub fn is_chaos(&self) -> bool {
42 *self == Class::CH
43 }
44
45 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}