MCPcopy Create free account
hub / github.com/ZettaScaleLabs/hiroz / parse_default_value

Function parse_default_value

crates/hiroz-codegen/src/parser/mod.rs:154–245  ·  view source on GitHub ↗

Parse a default value

(s: &str)

Source from the content-addressed store, hash-verified

152
153/// Parse a default value
154pub fn parse_default_value(s: &str) -> Result<DefaultValue> {
155 if s.starts_with('[') && s.ends_with(']') {
156 // Parse array
157 let inner = &s[1..s.len() - 1];
158 if inner.is_empty() {
159 bail!("Empty array default value: {}", s);
160 }
161 let elements: Vec<&str> = inner.split(',').map(|e| e.trim()).collect();
162 if elements.is_empty() {
163 bail!("Empty array default value: {}", s);
164 }
165
166 // Try to parse as bool array
167 let mut bools = Vec::new();
168 let mut all_bool = true;
169 for elem in &elements {
170 if *elem == "true" || *elem == "True" {
171 bools.push(true);
172 } else if *elem == "false" || *elem == "False" {
173 bools.push(false);
174 } else {
175 all_bool = false;
176 break;
177 }
178 }
179 if all_bool {
180 return Ok(DefaultValue::BoolArray(bools));
181 }
182
183 // Try to parse as int array
184 let mut ints = Vec::new();
185 let mut all_int = true;
186 for elem in &elements {
187 if let Ok(i) = elem.parse::<i64>() {
188 ints.push(i);
189 } else {
190 all_int = false;
191 break;
192 }
193 }
194 if all_int {
195 return Ok(DefaultValue::IntArray(ints));
196 }
197
198 // Try to parse as float array
199 let mut floats = Vec::new();
200 let mut all_float = true;
201 for elem in &elements {
202 if let Ok(f) = elem.parse::<f64>() {
203 floats.push(f);
204 } else {
205 all_float = false;
206 break;
207 }
208 }
209 if all_float {
210 return Ok(DefaultValue::FloatArray(floats));
211 }

Calls 5

BoolClass · 0.50
StringStruct · 0.50
lenMethod · 0.45
is_emptyMethod · 0.45
pushMethod · 0.45