shacl_ast/compiled/
target.rs1use 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}