MCPcopy Index your code
hub / github.com/aiscriptdev/aiscript / parse_value

Method parse_value

aiscript-directive/src/lib.rs:173–212  ·  view source on GitHub ↗
(&mut self)

Source from the content-addressed store, hash-verified

171 }
172
173 fn parse_value(&mut self) -> Option<Value> {
174 let token = self.scanner.current;
175 self.scanner.advance();
176 match token.kind {
177 TokenType::String => Some(Value::String(token.lexeme.to_owned())),
178 TokenType::Number => {
179 let num_str = token.lexeme;
180 // First try parsing as i64 (integer)
181 if let Ok(int_val) = num_str.parse::<i64>() {
182 Some(Value::Number(serde_json::Number::from(int_val)))
183 } else {
184 // If not an integer, try as f64 (float)
185 match num_str.parse::<f64>() {
186 Ok(float_val) => match serde_json::Number::from_f64(float_val) {
187 Some(num) => Some(Value::Number(num)),
188 None => {
189 self.scanner.error("Invalid float value");
190 None
191 }
192 },
193 Err(err) => {
194 self.scanner.error(&format!("Invalid number: {err}"));
195 None
196 }
197 }
198 }
199 }
200 TokenType::True => Some(Value::Bool(true)),
201 TokenType::False => Some(Value::Bool(false)),
202 TokenType::OpenBracket => {
203 let values = self.parse_array()?;
204 Some(Value::Array(values))
205 }
206 _ => {
207 self.scanner
208 .error(&format!("Unexpected token {:?}", token.kind));
209 None
210 }
211 }
212 }
213}
214
215#[cfg(test)]

Callers 2

parse_parametersMethod · 0.45
parse_arrayMethod · 0.45

Calls 3

advanceMethod · 0.80
parse_arrayMethod · 0.80
errorMethod · 0.45

Tested by

no test coverage detected