diff --git a/src/abstract_tree/value_node.rs b/src/abstract_tree/value_node.rs index f7c049b..6edf918 100644 --- a/src/abstract_tree/value_node.rs +++ b/src/abstract_tree/value_node.rs @@ -205,7 +205,11 @@ impl AbstractTree for ValueNode { fn run(&self, source: &str, context: &Map) -> Result { let value = match self { ValueNode::Boolean(value_source) => Value::Boolean(value_source.parse().unwrap()), - ValueNode::Float(value_source) => Value::Float(value_source.parse().unwrap()), + ValueNode::Float(value_source) => { + let float = value_source.parse()?; + + Value::Float(float) + } ValueNode::Function(function) => Value::Function(function.clone()), ValueNode::Integer(value_source) => Value::Integer(value_source.parse().unwrap()), ValueNode::String(value_source) => Value::string(value_source.clone()), diff --git a/src/error.rs b/src/error.rs index f964869..46fba06 100644 --- a/src/error.rs +++ b/src/error.rs @@ -176,6 +176,11 @@ pub enum Error { SerdeJson(String), ParserCancelled, + + ParseFloat { + reason: String, + }, + ExpectedIterable { actual: Value, }, @@ -441,6 +446,13 @@ impl fmt::Display for Error { f, "Parsing was cancelled either manually or because it took too long." ), + ParseFloat { reason } => { + write!( + f, + "Failed to parse a float value. Reason given: {}.", + reason + ) + } ExpectedFunctionType { actual } => write!(f, "Expected a function but got {actual}."), ExpectedIterable { actual } => { write!(f, "Expected an iterable value but got {actual}.")