valico/json_schema/validators/
property_names.rs

1use 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}