From 4e8d320c773378aaa06ade9051891a54713f9329 Mon Sep 17 00:00:00 2001 From: Jeff Date: Sat, 14 Oct 2023 14:18:13 -0400 Subject: [PATCH] Implement to json; Improve map display --- src/abstract_tree/tool.rs | 17 ++++++++++++++++- src/value/mod.rs | 8 ++++---- src/value/variable_map.rs | 6 +++++- 3 files changed, 25 insertions(+), 6 deletions(-) diff --git a/src/abstract_tree/tool.rs b/src/abstract_tree/tool.rs index cdf6dfb..8611110 100644 --- a/src/abstract_tree/tool.rs +++ b/src/abstract_tree/tool.rs @@ -174,6 +174,14 @@ impl Tool { Value::String("read".to_string()), Value::String("Get a file's content.".to_string()), ])?; + help_table.insert(vec![ + Value::String("from_json".to_string()), + Value::String("Convert a JSON string to a value.".to_string()), + ])?; + help_table.insert(vec![ + Value::String("to_json".to_string()), + Value::String("Convert a value to a JSON string.".to_string()), + ])?; Value::Table(help_table) } @@ -191,7 +199,14 @@ impl Tool { serde_json::from_str(json_string)? } - Tool::ToJson => todo!(), + Tool::ToJson => { + Error::expect_tool_argument_amount("to_json", 1, values.len())?; + + let value = &values[0]; + let json_string = serde_json::to_string(value)?; + + Value::String(json_string) + } }; Ok(value) diff --git a/src/value/mod.rs b/src/value/mod.rs index 2ca2222..523c797 100644 --- a/src/value/mod.rs +++ b/src/value/mod.rs @@ -413,10 +413,10 @@ impl Display for Value { fn fmt(&self, f: &mut Formatter) -> fmt::Result { match self { Value::String(string) => write!(f, "{string}"), - Value::Float(float) => write!(f, "{}", float), - Value::Integer(int) => write!(f, "{}", int), - Value::Boolean(boolean) => write!(f, "{}", boolean), - Value::Empty => write!(f, "()"), + Value::Float(float) => write!(f, "{float}"), + Value::Integer(int) => write!(f, "{int}"), + Value::Boolean(boolean) => write!(f, "{boolean}"), + Value::Empty => write!(f, "empty"), Value::List(list) => { write!(f, "[")?; for value in list { diff --git a/src/value/variable_map.rs b/src/value/variable_map.rs index 47220db..e846662 100644 --- a/src/value/variable_map.rs +++ b/src/value/variable_map.rs @@ -139,7 +139,11 @@ impl Default for VariableMap { impl Display for VariableMap { fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result { - Table::from(self).fmt(f) + write!(f, "{{\n")?; + for (key, value) in &self.variables { + write!(f, " {key} = {value}\n")?; + } + write!(f, "}}") } }