blockworx/doc_ng/
values.rs1use serde::{Deserialize, Serialize};
6
7#[derive(Clone, Copy, PartialEq, Eq, Default, Debug, Serialize, Deserialize)]
8pub enum LabelSide {
9 #[default]
10 Top,
11 Center,
12 Bottom,
13}
14
15#[derive(Clone, Copy, PartialEq, Eq, Default, Debug, Serialize, Deserialize)]
17pub enum Role {
18 #[default]
19 Accent0,
20 Accent1,
21 Accent2,
22 Accent3,
23 Accent4,
24 Accent5,
25 Accent6,
26 Accent7,
27 Accent8,
28}
29
30#[derive(Clone, Copy, PartialEq, Eq, Default, Debug, Serialize, Deserialize)]
31pub enum PinDir {
32 #[default]
33 Input,
34 InOut,
35 Output,
36}
37
38#[cfg(test)]
39mod tests {
40 use super::*;
41
42 #[test]
45 fn defaults_are_the_meaningful_zeros() {
46 assert_eq!(Role::default(), Role::Accent0);
47 assert_eq!(LabelSide::default(), LabelSide::Top);
48 assert_eq!(PinDir::default(), PinDir::Input);
49 }
50
51 #[test]
54 fn serde_names_are_stable() {
55 fn name<T: Serialize>(value: &T) -> String {
56 serde_json::to_string(value).expect("value enums serialize infallibly")
57 }
58
59 let roles = [
60 Role::Accent0,
61 Role::Accent1,
62 Role::Accent2,
63 Role::Accent3,
64 Role::Accent4,
65 Role::Accent5,
66 Role::Accent6,
67 Role::Accent7,
68 Role::Accent8,
69 ];
70 for (i, role) in roles.into_iter().enumerate() {
71 assert_eq!(name(&role), format!("\"Accent{i}\""));
72 }
73
74 assert_eq!(name(&LabelSide::Top), "\"Top\"");
75 assert_eq!(name(&LabelSide::Center), "\"Center\"");
76 assert_eq!(name(&LabelSide::Bottom), "\"Bottom\"");
77
78 assert_eq!(name(&PinDir::Input), "\"Input\"");
79 assert_eq!(name(&PinDir::InOut), "\"InOut\"");
80 assert_eq!(name(&PinDir::Output), "\"Output\"");
81 }
82}