json_utils/schema/
schema_node_for_literal.rs1use 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}