shacl_ast/compiled/
target.rs

1use srdf::Rdf;
2
3use crate::target::Target;
4
5use super::compiled_shacl_error::CompiledShaclError;
6use super::convert_iri_ref;
7
8#[derive(Debug)]
9pub enum CompiledTarget<S: Rdf> {
10    Node(S::Term),
11    Class(S::Term),
12    SubjectsOf(S::IRI),
13    ObjectsOf(S::IRI),
14    ImplicitClass(S::Term),
15}
16
17impl<S: Rdf> CompiledTarget<S> {
18    pub fn compile(target: Target) -> Result<Self, CompiledShaclError> {
19        let ans = match target {
20            Target::TargetNode(object) => CompiledTarget::Node(object.into()),
21            Target::TargetClass(object) => CompiledTarget::Class(object.into()),
22            Target::TargetSubjectsOf(iri_ref) => {
23                CompiledTarget::SubjectsOf(convert_iri_ref::<S>(iri_ref)?)
24            }
25            Target::TargetObjectsOf(iri_ref) => {
26                CompiledTarget::ObjectsOf(convert_iri_ref::<S>(iri_ref)?)
27            }
28            Target::TargetImplicitClass(object) => CompiledTarget::ImplicitClass(object.into()),
29        };
30
31        Ok(ans)
32    }
33}