json-utils 0.3.5

An utility crate for working with JSON and JSON-schemas
Documentation
use crate::json::JsValue;

use super::SchemaNode;

impl SchemaNode {
    pub fn for_literal(literal_value: &JsValue) -> SchemaNode {
        match *literal_value {
            JsValue::Null => SchemaNode::null().into(),
            JsValue::Bool(_) => SchemaNode::boolean().into(),
            JsValue::Number(ref value) => 
                if value.is_i64() {
                    SchemaNode::integer().into()
                } else {
                    SchemaNode::number().into()
                },
            JsValue::String(_) => SchemaNode::string().into(),
            JsValue::Array(_) => SchemaNode::array(SchemaNode::any()).into(),
            JsValue::Object(ref props) => {
                props.into_iter().fold(
                    SchemaNode::object(),
                    |acc, (key, value)| {
                        acc.add_property(key, Self::for_literal(value)).add_required(key)
                    }
                ).into()
            },
        }
    }
}