archetect_core/config/
variable.rs1#[derive(Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
2pub struct VariableInfo {
3 #[serde(skip_serializing_if = "Option::is_none")]
4 value: Option<String>,
5 #[serde(skip_serializing_if = "Option::is_none")]
6 default: Option<String>,
7 #[serde(skip_serializing_if = "Option::is_none")]
8 prompt: Option<String>,
9 #[serde(skip_serializing_if = "Option::is_none")]
10 required: Option<bool>,
11 #[serde(rename = "type", skip_serializing_if = "Option::is_none")]
12 variable_type: Option<VariableType>,
13}
14
15impl VariableInfo {
16 pub fn new() -> VariableInfoBuilder {
17 VariableInfoBuilder {
18 variable_info: VariableInfo {
19 value: None,
20 default: None,
21 prompt: None,
22 required: None,
23 variable_type: None,
24 },
25 }
26 }
27
28 pub fn with_default<D: Into<String>>(default: D) -> VariableInfoBuilder {
29 VariableInfoBuilder {
30 variable_info: VariableInfo {
31 value: None,
32 default: Some(default.into()),
33 prompt: None,
34 required: None,
35 variable_type: None,
36 },
37 }
38 }
39
40 pub fn with_value<V: Into<String>>(value: V) -> VariableInfoBuilder {
41 VariableInfoBuilder {
42 variable_info: VariableInfo {
43 value: Some(value.into()),
44 default: None,
45 prompt: None,
46 required: None,
47 variable_type: None,
48 },
49 }
50 }
51
52 pub fn with_prompt<P: Into<String>>(prompt: P) -> VariableInfoBuilder {
53 VariableInfoBuilder {
54 variable_info: VariableInfo {
55 prompt: Some(prompt.into()),
56 value: None,
57 default: None,
58 required: None,
59 variable_type: None,
60 },
61 }
62 }
63
64 pub fn prompt(&self) -> Option<&str> {
65 match &self.prompt {
66 Some(prompt) => Some(&prompt),
67 None => None,
68 }
69 }
70
71 pub fn value(&self) -> Option<&str> {
72 match &self.value {
73 Some(value) => Some(value.as_str()),
74 None => None,
75 }
76 }
77
78 pub fn default(&self) -> Option<&str> {
79 match &self.default {
80 Some(default) => Some(default.as_str()),
81 None => None,
82 }
83 }
84
85 pub fn variable_type(&self) -> VariableType {
86 self.variable_type.clone().unwrap_or(VariableType::String)
87 }
88
89 pub fn required(&self) -> bool {
90 self.required.unwrap_or(true)
91 }
92
93 pub fn has_derived_value(&self) -> bool {
94 self.value.is_some()
95 }
96}
97
98#[derive(Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
99pub enum VariableType {
100 #[serde(rename = "string")]
101 String,
102 #[serde(rename = "int")]
103 Int,
104 #[serde(rename = "bool")]
105 Bool,
106 #[serde(rename = "enum")]
107 Enum(Vec<String>),
108 #[serde(rename = "array", alias = "list")]
109 Array,
110}
111
112pub struct VariableInfoBuilder {
113 variable_info: VariableInfo,
114}
115
116impl VariableInfoBuilder {
117 pub fn with_prompt<P: Into<String>>(mut self, prompt: P) -> VariableInfoBuilder {
118 self.variable_info.prompt = Some(prompt.into());
119 self
120 }
121
122 pub fn with_value<V: Into<String>>(mut self, value: V) -> VariableInfoBuilder {
123 self.variable_info.value = Some(value.into());
124 self
125 }
126
127 pub fn with_default<D: Into<String>>(mut self, default: D) -> VariableInfoBuilder {
128 self.variable_info.default = Some(default.into());
129 self
130 }
131
132 pub fn with_type(mut self, variable_type: VariableType) -> VariableInfoBuilder {
133 self.variable_info.variable_type = Some(variable_type);
134 self
135 }
136
137 pub fn build(self) -> VariableInfo {
138 self.variable_info
139 }
140}