my_enum_manual/
my_enum_manual.rs1use std::fs::File;
4
5use vizz::DataDescription;
6use vizz::Graph;
7use vizz::Value;
8use vizz::Visualize;
9
10enum MyEnum {
11 Plain,
12 WithU8(u8),
13 WithU8AndString(u8, String),
14 WithStruct { my_u8: u8, my_string: String },
15}
16
17impl Visualize for MyEnum {
18 fn data(&self) -> Option<Value> {
19 Some(Value::Owned(
20 match self {
21 MyEnum::Plain => "Plain",
22 MyEnum::WithU8(_) => "WithU8",
23 MyEnum::WithU8AndString(_, _) => "WithU8AndString",
24 MyEnum::WithStruct { .. } => "WithStruct",
25 }
26 .into(),
27 ))
28 }
29
30 fn associated_data(&self) -> Option<Vec<DataDescription>> {
31 match self {
32 MyEnum::Plain => None,
33 MyEnum::WithU8(a) => Some(vec![DataDescription::from(a)]),
34 MyEnum::WithU8AndString(a, b) => {
35 Some(vec![DataDescription::from(a), DataDescription::from(b)])
36 }
37 MyEnum::WithStruct { my_u8, my_string } => Some(vec![
38 DataDescription::from(my_u8).with_label("my_u8"),
39 DataDescription::from(my_string).with_label("my_string"),
40 ]),
41 }
42 }
43}
44
45pub fn main() -> Result<(), Box<dyn std::error::Error>> {
46 let plain_enum = MyEnum::Plain;
48 let enum_with_u8_and_string = MyEnum::WithU8AndString(8, String::from("hey"));
49 let enum_with_u8 = MyEnum::WithU8(8);
50 let enum_with_named_fields = MyEnum::WithStruct {
51 my_u8: 8,
52 my_string: String::from("hey"),
53 };
54
55 let mut dot_file = File::create("my_enum.dot")?;
57
58 Graph::new()
60 .set_id("my_enum_visualization")
61 .add_node(&plain_enum)
62 .add_node(&enum_with_named_fields)
63 .add_node(&enum_with_u8)
64 .add_node(&enum_with_u8_and_string)
65 .write_to(&mut dot_file)?;
66
67 Ok(())
68}