json_utils/schema/
schema_node_for_literal.rs

1use crate::json::JsValue;
2
3use super::SchemaNode;
4
5impl SchemaNode {
6    pub fn for_literal(literal_value: &JsValue) -> SchemaNode {
7        match *literal_value {
8            JsValue::Null => SchemaNode::null().into(),
9            JsValue::Bool(_) => SchemaNode::boolean().into(),
10            JsValue::Number(ref value) => 
11                if value.is_i64() {
12                    SchemaNode::integer().into()
13                } else {
14                    SchemaNode::number().into()
15                },
16            JsValue::String(_) => SchemaNode::string().into(),
17            JsValue::Array(_) => SchemaNode::array(SchemaNode::any()).into(),
18            JsValue::Object(ref props) => {
19                props.into_iter().fold(
20                    SchemaNode::object(),
21                    |acc, (key, value)| {
22                        acc.add_property(key, Self::for_literal(value)).add_required(key)
23                    }
24                ).into()
25            },
26        }
27    }
28}