wick_interface_types/types/
enum_def.rs1use serde::{Deserialize, Serialize};
2
3use crate::is_false;
4
5#[derive(Debug, Clone, Default, Serialize, Deserialize, Eq)]
7#[must_use]
8#[non_exhaustive]
9pub struct EnumDefinition {
10 pub name: String,
12 #[serde(default, skip_serializing_if = "Vec::is_empty")]
14 pub variants: Vec<EnumVariant>,
15 #[serde(default, skip_serializing_if = "Option::is_none")]
17 pub description: Option<String>,
18 #[serde(default, skip_serializing_if = "is_false")]
20 pub imported: bool,
21}
22
23impl EnumDefinition {
24 pub fn new<T: Into<String>>(name: T, variants: Vec<EnumVariant>, description: Option<String>) -> Self {
26 Self {
27 name: name.into(),
28 variants,
29 imported: false,
30 description,
31 }
32 }
33}
34
35impl PartialEq for EnumDefinition {
36 fn eq(&self, other: &Self) -> bool {
37 self.name == other.name && self.variants == other.variants
38 }
39}
40
41#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq, Eq)]
42#[must_use]
43#[non_exhaustive]
44pub struct EnumVariant {
46 pub name: String,
48 #[serde(default, skip_serializing_if = "Option::is_none")]
50 pub index: Option<u32>,
51 #[serde(default, skip_serializing_if = "Option::is_none")]
53 pub value: Option<String>,
54 #[serde(default, skip_serializing_if = "Option::is_none")]
56 pub description: Option<String>,
57}
58
59impl EnumVariant {
60 pub fn new<T: Into<String>>(name: T, index: Option<u32>, value: Option<String>, description: Option<String>) -> Self {
62 Self {
63 name: name.into(),
64 index,
65 value,
66 description,
67 }
68 }
69}