toon_validate_core/
json_parser.rs1use crate::{error::Result, value::Value};
2use serde_json;
3
4pub struct JsonParser;
5
6impl JsonParser {
7 pub fn parse(input: &str) -> Result<Value> {
8 let json_value: serde_json::Value = serde_json::from_str(input)?;
9 Ok(Self::convert_json_to_value(json_value))
10 }
11
12 fn convert_json_to_value(json: serde_json::Value) -> Value {
13 match json {
14 serde_json::Value::Null => Value::Null,
15 serde_json::Value::Bool(b) => Value::Bool(b),
16 serde_json::Value::Number(n) => {
17 Value::Number(n.as_f64().unwrap_or(0.0))
18 }
19 serde_json::Value::String(s) => Value::String(s),
20 serde_json::Value::Array(arr) => {
21 Value::Array(arr.into_iter().map(Self::convert_json_to_value).collect())
22 }
23 serde_json::Value::Object(obj) => {
24 Value::Object(
25 obj.into_iter()
26 .map(|(k, v)| (k, Self::convert_json_to_value(v)))
27 .collect()
28 )
29 }
30 }
31 }
32}