From 19249c0e50134fd51731d328fee860096082014a Mon Sep 17 00:00:00 2001 From: Jeff Date: Wed, 23 Aug 2023 23:07:54 -0400 Subject: [PATCH] Implement dot notation for list assignment --- src/value/variable_map.rs | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/src/value/variable_map.rs b/src/value/variable_map.rs index ab0c184..0ac521a 100644 --- a/src/value/variable_map.rs +++ b/src/value/variable_map.rs @@ -98,12 +98,30 @@ impl VariableMap { if let Some((map_name, next_identifier)) = split { let get_value = self.variables.get_mut(map_name); - if let Some(map_value) = get_value { - if let Value::Map(map) = map_value { + if let Some(found_value) = get_value { + if let Value::List(list) = found_value { + let index = if let Ok(index) = next_identifier.parse::() { + index + } else { + return Err(Error::expected_int(Value::String( + next_identifier.to_string(), + ))); + }; + + let mut missing_elements = index - list.len() + 1; + + while missing_elements > 0 { + list.push(value.clone()); + + missing_elements -= 1; + } + + Ok(()) + } else if let Value::Map(map) = found_value { map.set_value(next_identifier, value) } else { Err(Error::ExpectedMap { - actual: map_value.clone(), + actual: found_value.clone(), }) } } else {