toon-validate-core 0.1.0

Core library for TOON file parsing, validation, and token analysis
Documentation
use crate::{error::Result, value::Value};
use serde_json;

pub struct JsonParser;

impl JsonParser {
    pub fn parse(input: &str) -> Result<Value> {
        let json_value: serde_json::Value = serde_json::from_str(input)?;
        Ok(Self::convert_json_to_value(json_value))
    }
    
    fn convert_json_to_value(json: serde_json::Value) -> Value {
        match json {
            serde_json::Value::Null => Value::Null,
            serde_json::Value::Bool(b) => Value::Bool(b),
            serde_json::Value::Number(n) => {
                Value::Number(n.as_f64().unwrap_or(0.0))
            }
            serde_json::Value::String(s) => Value::String(s),
            serde_json::Value::Array(arr) => {
                Value::Array(arr.into_iter().map(Self::convert_json_to_value).collect())
            }
            serde_json::Value::Object(obj) => {
                Value::Object(
                    obj.into_iter()
                        .map(|(k, v)| (k, Self::convert_json_to_value(v)))
                        .collect()
                )
            }
        }
    }
}