valico/json_schema/validators/
property_names.rs1use serde_json::Value;
2
3use super::super::scope;
4
5#[allow(missing_copy_implementations)]
6pub struct PropertyNames {
7 pub url: url::Url,
8}
9
10impl super::Validator for PropertyNames {
11 fn validate(
12 &self,
13 val: &Value,
14 path: &str,
15 scope: &scope::Scope,
16 _: &super::ValidationState,
17 ) -> super::ValidationState {
18 let object = nonstrict_process!(val.as_object(), path);
19
20 let schema = scope.resolve(&self.url);
21 let mut state = super::ValidationState::new();
22
23 if let Some(schema) = schema {
24 for key in object.keys() {
25 let item_path = [path, ["[", key.as_ref(), "]"].join("").as_ref()].join("/");
26 state.append(schema.validate_in(&Value::from(key.clone()), item_path.as_ref()));
27 }
28 } else {
29 state.missing.push(self.url.clone());
30 }
31
32 state
33 }
34}