1use std::fmt::Debug;
7
8#[derive(Default,)]
10pub enum Keeping<T> {
11 #[default]
13 Keep,
14 Set(T),
16}
17
18#[derive(Default,)]
20pub enum Defaulting<T: Default> {
21 #[default]
23 Default,
24 Set(T),
26}
27
28#[derive(Default,)]
30pub enum Building<T> {
31 #[default]
33 Undefined,
34 Set(T),
36}
37
38impl<T> Debug for Keeping<T> {
39 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
40 match self {
41 Self::Keep => write!(f, "Keeping::Keep"),
42 Self::Set(_) => write!(f, "Keeping::Set(_)"),
43 }
44 }
45}
46
47impl<T> Keeping<T> {
48 pub fn is_set(&self) -> bool {
50 match self {
51 Self::Keep => false,
52 Self::Set(_) => true,
53 }
54 }
55 pub fn unwrap(self) -> T {
59 match self {
60 Self::Keep => panic!("Can't unwrap value from {:#?}", self),
61 Self::Set(value) => value,
62 }
63 }
64}
65
66impl<T: Default> Debug for Defaulting<T> {
67 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
68 match self {
69 Self::Default => write!(f, "Defaulting::Default"),
70 Self::Set(_) => write!(f, "Defaulting::Set(_)"),
71 }
72 }
73}
74
75impl<T: Default> Defaulting<T> {
76 pub fn unwrap(self) -> T {
78 match self {
79 Self::Default => T::default(),
80 Self::Set(value) => value,
81 }
82 }
83}
84
85impl<T> Debug for Building<T> {
86 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
87 match self {
88 Self::Undefined => write!(f, "Building::Undefined"),
89 Self::Set(_) => write!(f, "Building::Set(_)"),
90 }
91 }
92}
93
94impl<T> Building<T> {
95 pub fn is_undefined(&self) -> bool {
97 match self {
98 Self::Undefined => true,
99 _ => false,
100 }
101 }
102 pub fn unwrap(self) -> T {
106 match self {
107 Self::Set(value) => value,
108 _ => panic!("Can't unwrap value from {:#?}", self),
109 }
110 }
111}