shacl_ast/compiled/
target.rs

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
use srdf::SRDFBasic;

use crate::target::Target;

use super::compiled_shacl_error::CompiledShaclError;
use super::convert_iri_ref;

#[derive(Debug)]
pub enum CompiledTarget<S: SRDFBasic> {
    TargetNode(S::Term),
    TargetClass(S::Term),
    TargetSubjectsOf(S::IRI),
    TargetObjectsOf(S::IRI),
}

impl<S: SRDFBasic> CompiledTarget<S> {
    pub fn compile(target: Target) -> Result<Self, CompiledShaclError> {
        let ans = match target {
            Target::TargetNode(object) => CompiledTarget::TargetNode(S::object_as_term(&object)),
            Target::TargetClass(object) => CompiledTarget::TargetClass(S::object_as_term(&object)),
            Target::TargetSubjectsOf(iri_ref) => {
                CompiledTarget::TargetSubjectsOf(convert_iri_ref::<S>(iri_ref)?)
            }
            Target::TargetObjectsOf(iri_ref) => {
                CompiledTarget::TargetObjectsOf(convert_iri_ref::<S>(iri_ref)?)
            }
        };

        Ok(ans)
    }
}