ospf_rust_math/algebra/
trivalent.rs1pub 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}