shacl_validation/constraints/core/other/
in.rs

1use crate::constraints::constraint_error::ConstraintError;
2use crate::constraints::SparqlValidator;
3use crate::constraints::{NativeValidator, Validator};
4use crate::engine::native::NativeEngine;
5use crate::engine::sparql::SparqlEngine;
6use crate::engine::Engine;
7use crate::helpers::constraint::validate_with;
8use crate::validation_report::result::ValidationResult;
9use crate::value_nodes::ValueNodeIteration;
10use crate::value_nodes::ValueNodes;
11use shacl_ast::compiled::component::CompiledComponent;
12use shacl_ast::compiled::component::In;
13use shacl_ast::compiled::shape::CompiledShape;
14use srdf::Query;
15use srdf::Rdf;
16use srdf::Sparql;
17use std::fmt::Debug;
18
19impl<S: Rdf + Debug> Validator<S> for In<S> {
20    fn validate(
21        &self,
22        component: &CompiledComponent<S>,
23        shape: &CompiledShape<S>,
24        _: &S,
25        _: impl Engine<S>,
26        value_nodes: &ValueNodes<S>,
27        _source_shape: Option<&CompiledShape<S>>,
28    ) -> Result<Vec<ValidationResult>, ConstraintError> {
29        let r#in = |value_node: &S::Term| !self.values().contains(value_node);
30        validate_with(component, shape, value_nodes, ValueNodeIteration, r#in)
31    }
32}
33
34impl<S: Query + Debug + 'static> NativeValidator<S> for In<S> {
35    fn validate_native(
36        &self,
37        component: &CompiledComponent<S>,
38        shape: &CompiledShape<S>,
39        store: &S,
40        value_nodes: &ValueNodes<S>,
41        source_shape: Option<&CompiledShape<S>>,
42    ) -> Result<Vec<ValidationResult>, ConstraintError> {
43        self.validate(
44            component,
45            shape,
46            store,
47            NativeEngine,
48            value_nodes,
49            source_shape,
50        )
51    }
52}
53
54impl<S: Sparql + Debug + 'static> SparqlValidator<S> for In<S> {
55    fn validate_sparql(
56        &self,
57        component: &CompiledComponent<S>,
58        shape: &CompiledShape<S>,
59        store: &S,
60        value_nodes: &ValueNodes<S>,
61        source_shape: Option<&CompiledShape<S>>,
62    ) -> Result<Vec<ValidationResult>, ConstraintError> {
63        self.validate(
64            component,
65            shape,
66            store,
67            SparqlEngine,
68            value_nodes,
69            source_shape,
70        )
71    }
72}