ai_sdk_provider/
json_value.rs

1use serde::{Deserialize, Serialize};
2use std::collections::HashMap;
3
4/// A JSON value can be a string, number, boolean, object, array, or null.
5/// JSON values can be serialized and deserialized by serde_json.
6#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
7#[serde(untagged)]
8pub enum JsonValue {
9    /// JSON null value
10    Null,
11    /// JSON boolean value
12    Bool(bool),
13    /// JSON number value
14    Number(serde_json::Number),
15    /// JSON string value
16    String(String),
17    /// JSON array value
18    Array(Vec<JsonValue>),
19    /// JSON object value
20    Object(JsonObject),
21}
22
23/// JSON object type
24pub type JsonObject = HashMap<String, JsonValue>;
25
26/// JSON array type
27pub type JsonArray = Vec<JsonValue>;
28
29#[cfg(test)]
30mod tests {
31    use super::*;
32
33    #[test]
34    fn test_json_value_roundtrip() {
35        let json = r#"{"key": "value", "number": 42, "array": [1, 2, 3]}"#;
36        let value: JsonValue = serde_json::from_str(json).unwrap();
37        let serialized = serde_json::to_string(&value).unwrap();
38        let deserialized: JsonValue = serde_json::from_str(&serialized).unwrap();
39        assert_eq!(value, deserialized);
40    }
41}