schema_model/model/
enum_type.rs1#[derive(Debug, Clone)]
2pub struct EnumType {
3 name: String,
4 values: Vec<EnumValue>,
5}
6
7impl EnumType {
8 pub fn new<S: Into<String>>(name: S, values: Vec<EnumValue>) -> Self {
9 Self {
10 name: name.into(),
11 values,
12 }
13 }
14
15 pub fn name(&self) -> &str {
16 &self.name
17 }
18
19 pub fn values(&self) -> &Vec<EnumValue> {
20 &self.values
21 }
22}
23
24#[derive(Debug, Clone)]
25pub struct EnumValue {
26 name: String,
27 code: Option<String>,
28}
29
30impl EnumValue {
31 pub fn new<N: Into<String>, C: Into<String>>(name: N, code: Option<C>) -> Self {
33 Self {
34 name: name.into(),
35 code: code.map(|c| c.into()),
36 }
37 }
38
39 pub fn name(&self) -> &str {
40 &self.name
41 }
42
43 pub fn code(&self) -> &str {
45 self.code.as_deref().unwrap_or(&self.name)
46 }
47}
48
49#[cfg(test)]
50mod tests {
51 use super::*;
52
53 #[test]
54 fn enum_type_and_value_getters() {
55 let et = EnumType::new(
56 "Color",
57 vec![
58 EnumValue::new("RED", None::<String>),
59 EnumValue::new("GREEN", Some("G")),
60 ],
61 );
62 assert_eq!(et.name(), "Color");
63 assert_eq!(et.values().len(), 2);
64
65 let v1 = et.values()[0].clone();
66 assert_eq!(v1.name(), "RED");
67 assert_eq!(v1.code(), "RED");
69
70 let v2 = et.values()[1].clone();
71 assert_eq!(v2.code(), "G");
72 }
73}