1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
use std::collections::HashMap; use std::collections::HashSet; use crate::json::JsValue; use super::SchemaNode; #[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)] pub struct ObjectNode { pub properties: HashMap<String, SchemaNode>, #[serde(skip_serializing_if = "HashSet::is_empty")] pub required: HashSet<String>, #[serde(skip_serializing_if = "HashMap::is_empty")] #[serde(flatten)] pub extra: HashMap<String, JsValue>, } impl ObjectNode { pub fn with_properties(self, properties: HashMap<String, SchemaNode>) -> Self { Self { properties, ..self } } pub fn add_property<S: Into<SchemaNode>>(mut self, key: &str, schema: S) -> Self { self.properties.insert(key.to_owned(), schema.into()); self } pub fn rm_property(mut self, key: &str) -> Self { self.properties.remove(key); self } pub fn with_required(self, required: HashSet<String>) -> Self { Self { required, ..self } } pub fn add_required(mut self, key: &str) -> Self { self.required.insert(key.to_owned()); self } pub fn rm_required(mut self, key: &str) -> Self { self.required.remove(key); self } } impl_extra_props!(ObjectNode, extra);