shacl_ast/compiled/
severity.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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
use iri_s::iri;
use iri_s::IriS;
use srdf::SRDFBasic;

use crate::severity::Severity;
use crate::*;

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

#[derive(Hash, PartialEq, Eq, Debug)]
pub enum CompiledSeverity<S: SRDFBasic> {
    Violation,
    Warning,
    Info,
    Generic(S::IRI),
}

impl<S: SRDFBasic> CompiledSeverity<S> {
    pub fn compile(severity: Option<Severity>) -> Result<Option<Self>, CompiledShaclError> {
        let ans = match severity {
            Some(severity) => {
                let severity = match severity {
                    Severity::Violation => CompiledSeverity::Violation,
                    Severity::Warning => CompiledSeverity::Warning,
                    Severity::Info => CompiledSeverity::Info,
                    Severity::Generic(iri_ref) => {
                        CompiledSeverity::Generic(convert_iri_ref::<S>(iri_ref)?)
                    }
                };
                Some(severity)
            }
            None => None,
        };

        Ok(ans)
    }
}

impl<S: SRDFBasic> From<&CompiledSeverity<S>> for IriS {
    fn from(value: &CompiledSeverity<S>) -> Self {
        match value {
            CompiledSeverity::Violation => iri!(SH_VIOLATION_STR),
            CompiledSeverity::Warning => iri!(SH_WARNING_STR),
            CompiledSeverity::Info => iri!(SH_INFO_STR),
            CompiledSeverity::Generic(iri) => S::iri2iri_s(iri),
        }
    }
}