From c25888288a1e30e9852efbe5ca3e084c484f969e Mon Sep 17 00:00:00 2001 From: Nicolas Luck Date: Thu, 24 Aug 2023 18:10:47 +0200 Subject: [PATCH] Fix parsing of floats --- src/machine/lib_machine.rs | 2 +- src/machine/parsed_results.rs | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/machine/lib_machine.rs b/src/machine/lib_machine.rs index 9c524588..a3438783 100644 --- a/src/machine/lib_machine.rs +++ b/src/machine/lib_machine.rs @@ -52,7 +52,7 @@ impl Machine { .iter() // 4. Trim and remove empty lines .map(|s| s.trim()) - .map(|s| s.replace(".", "")) + .map(|s| if s.ends_with(".") { s[..s.len()-1].to_string() } else { s.to_string() }) .filter(|s| !s.is_empty()) // 5. Parse into QueryResolutionLine .map(QueryResolutionLine::try_from) diff --git a/src/machine/parsed_results.rs b/src/machine/parsed_results.rs index ec9b92b8..01ba6d54 100644 --- a/src/machine/parsed_results.rs +++ b/src/machine/parsed_results.rs @@ -163,7 +163,13 @@ impl TryFrom for Value { fn try_from(string: String) -> Result { let trimmed = string.trim(); - if trimmed.starts_with("'") && trimmed.ends_with("'") { + if let Ok(float_value) = string.parse::() { + println!("float value: {} -> {}", string, float_value); + Ok(Value::Float(OrderedFloat(float_value))) + } else if let Ok(int_value) = string.parse::() { + println!("int value: {} -> {}", string, int_value); + Ok(Value::Integer(int_value.into())) + } else if trimmed.starts_with("'") && trimmed.ends_with("'") { Ok(Value::String(trimmed[1..trimmed.len() - 1].into())) } else if trimmed.starts_with("\"") && trimmed.ends_with("\"") { Ok(Value::String(trimmed[1..trimmed.len() - 1].into())) -- 2.54.0