mech_core/structures/
enums.rs1use crate::*;
2
3#[derive(Clone, Debug, PartialEq, Eq)]
6pub struct MechEnum {
7 pub id: u64,
8 pub variants: Vec<(u64, Option<Value>)>,
9}
10
11impl MechEnum {
12
13 #[cfg(feature = "pretty_print")]
14 pub fn to_html(&self) -> String {
15 let mut variants = Vec::new();
16 for (id, value) in &self.variants {
17 let value_html = match value {
18 Some(v) => v.to_html(),
19 None => "None".to_string(),
20 };
21 variants.push(format!("<span class=\"mech-enum-variant\">{}: {}</span>", id, value_html));
22 }
23 format!("<span class=\"mech-enum\"><span class=\"mech-start-brace\">{{</span>{}<span class=\"mech-end-brace\">}}</span></span>", variants.join(", "))
24 }
25
26 pub fn kind(&self) -> ValueKind {
27 ValueKind::Enum(self.id)
28 }
29
30 pub fn size_of(&self) -> usize {
31 self.variants.iter().map(|(_,v)| v.as_ref().map_or(0, |x| x.size_of())).sum()
32 }
33}
34
35#[cfg(feature = "pretty_print")]
36impl PrettyPrint for MechEnum {
37 fn pretty_print(&self) -> String {
38 let mut builder = Builder::default();
39 let string_elements: Vec<String> = vec![format!("{}{:?}",self.id,self.variants)];
40 builder.push_record(string_elements);
41 let mut table = builder.build();
42 table.with(Style::modern_rounded());
43 format!("{table}")
44 }
45}
46
47impl Hash for MechEnum {
48 fn hash<H: Hasher>(&self, state: &mut H) {
49 self.id.hash(state);
50 self.variants.hash(state);
51 }
52}