ospf_rust_math/algebra/
trivalent.rs

1pub enum Trivalent {
2    True,
3    False,
4    Unknown
5}
6
7pub type Triv = Trivalent;
8
9impl From<bool> for Trivalent {
10    fn from(value: bool) -> Self {
11        if value {
12            Trivalent::True
13        } else {
14            Trivalent::False
15        }
16    }
17}
18
19impl From<Option<bool>> for Trivalent {
20    fn from(value: Option<bool>) -> Self {
21        if let Some(value) = value {
22            Trivalent::from(value)
23        } else {
24            Trivalent::Unknown
25        }
26    }
27}
28
29impl From<BalancedTrivalent> for Trivalent {
30    fn from(value: BalancedTrivalent) -> Self {
31        match value {
32            BalancedTrivalent::True => Trivalent::True,
33            BalancedTrivalent::False => Trivalent::False,
34            BalancedTrivalent::Unknown => Trivalent::Unknown,
35        }
36    }
37}
38
39impl Trivalent {
40    fn is_true(&self) -> Option<bool> {
41        match self {
42            Trivalent::True => Some(true),
43            Trivalent::False => Some(false),
44            Trivalent::Unknown => None,
45        }
46    }
47}
48
49pub enum BalancedTrivalent {
50    True,
51    False,
52    Unknown
53}
54
55pub type BTriv = BalancedTrivalent;
56
57impl From<bool> for BalancedTrivalent {
58    fn from(value: bool) -> Self {
59        if value {
60            BalancedTrivalent::True
61        } else {
62            BalancedTrivalent::False
63        }
64    }
65}
66
67impl From<Option<bool>> for BalancedTrivalent {
68    fn from(value: Option<bool>) -> Self {
69        if let Some(value) = value {
70            BalancedTrivalent::from(value)
71        } else {
72            BalancedTrivalent::Unknown
73        }
74    }
75}
76
77impl From<Trivalent> for BalancedTrivalent {
78    fn from(value: Trivalent) -> Self {
79        match value {
80            Trivalent::True => BalancedTrivalent::True,
81            Trivalent::False => BalancedTrivalent::False,
82            Trivalent::Unknown => BalancedTrivalent::Unknown,
83        }
84    }
85}
86
87impl BalancedTrivalent {
88    fn is_true(&self) -> bool {
89        match self {
90            BalancedTrivalent::True => true,
91            BalancedTrivalent::False => false,
92            BalancedTrivalent::Unknown => false,
93        }
94    }
95}