Helper function to convert AIScript Value to serde_json::Value
(value: &Value)
| 155 | |
| 156 | // Helper function to convert AIScript Value to serde_json::Value |
| 157 | fn 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 |
| 190 | fn extract_keyword_args<'gc>( |
no test coverage detected