Skip to main content

valico/json_schema/validators/
enum_.rs

1use serde_json::Value;
2
3use super::super::errors;
4use super::super::helpers::is_matching;
5use super::super::scope;
6
7#[allow(missing_copy_implementations)]
8pub struct Enum {
9    pub items: Vec<Value>,
10}
11
12impl super::Validator for Enum {
13    fn validate(
14        &self,
15        val: &Value,
16        path: &str,
17        _scope: &scope::Scope,
18        _: &super::ValidationState,
19    ) -> super::ValidationState {
20        let mut state = super::ValidationState::new();
21
22        let mut contains = false;
23        for value in self.items.iter() {
24            if is_matching(val, value) {
25                contains = true;
26                break;
27            }
28        }
29
30        if !contains {
31            state.errors.push(Box::new(errors::Enum {
32                path: path.to_string(),
33            }))
34        }
35
36        state
37    }
38}