diff --git a/src/prelude.rs b/src/prelude.rs index 5387ce4..433e268 100644 --- a/src/prelude.rs +++ b/src/prelude.rs @@ -128,12 +128,12 @@ fn obj(_: Vec) -> Value { Value::Object(HashMap::new()) } -fn set(mut args: Vec) -> Value { +fn set(args: Vec) -> Value { + let mut object = args.get(0).unwrap().as_object().unwrap().clone(); let name = args.get(1).unwrap().as_string().unwrap().to_string(); let value = args.get(2).unwrap().clone(); - let object = args.get_mut(0).unwrap().as_object_mut().unwrap(); - object.insert(name, value.clone()); - value + object.insert(name, value); + object.into() } fn get(args: Vec) -> Value { diff --git a/src/value.rs b/src/value.rs index 73b79e7..fdfe9a4 100644 --- a/src/value.rs +++ b/src/value.rs @@ -139,6 +139,12 @@ impl From<&str> for Value { } } +impl From> for Value { + fn from(value: HashMap) -> Self { + Self::Object(value) + } +} + impl From> for Value where T: Into,