MCPcopy Index your code
hub / github.com/aiscriptdev/aiscript / to_json_value

Function to_json_value

aiscript-vm/src/stdlib/serde.rs:157–187  ·  view source on GitHub ↗

Helper function to convert AIScript Value to serde_json::Value

(value: &Value)

Source from the content-addressed store, hash-verified

155
156// Helper function to convert AIScript Value to serde_json::Value
157fn to_json_value(value: &Value) -> Result<serde_json::Value, VmError> {
158 match value {
159 Value::Object(obj) => {
160 let mut map = serde_json::Map::new();
161 for (k, v) in &obj.borrow().fields {
162 map.insert(k.to_string(), to_json_value(v)?);
163 }
164 Ok(serde_json::Value::Object(map))
165 }
166 Value::List(list) => {
167 let values: Result<Vec<_>, _> = list
168 .borrow()
169 .data
170 .iter()
171 .map(|v| to_json_value(v))
172 .collect();
173 Ok(serde_json::Value::Array(values?))
174 }
175 Value::Number(n) => Ok(serde_json::Value::Number(
176 serde_json::Number::from_f64(*n)
177 .ok_or_else(|| VmError::RuntimeError("Invalid number value for JSON".into()))?,
178 )),
179 Value::String(s) => Ok(serde_json::Value::String(s.to_string())),
180 Value::IoString(s) => Ok(serde_json::Value::String(s.to_string())),
181 Value::Boolean(b) => Ok(serde_json::Value::Bool(*b)),
182 Value::Nil => Ok(serde_json::Value::Null),
183 _ => Err(VmError::RuntimeError(
184 "Value cannot be serialized to JSON".into(),
185 )),
186 }
187}
188
189// Helper function to extract keyword arguments from args vector
190fn extract_keyword_args<'gc>(

Callers 2

serde_to_strFunction · 0.85
serde_to_fileFunction · 0.85

Calls 3

ObjectClass · 0.85
RuntimeErrorClass · 0.85
borrowMethod · 0.45

Tested by

no test coverage detected