shapes_converter/shex_to_sparql/
triple_pattern.rs

1use prefixmap::{IriRef, PrefixMap, PrefixMapError};
2
3use crate::shex_to_sparql::Var;
4
5pub struct TriplePattern {
6    subj: Var,
7    pred: IriRef,
8    obj: Var,
9}
10
11impl TriplePattern {
12    pub fn new(subj: &Var, pred: &IriRef, obj: &Var) -> TriplePattern {
13        TriplePattern {
14            subj: subj.clone(),
15            pred: pred.clone(),
16            obj: obj.clone(),
17        }
18    }
19
20    pub fn show_qualified(
21        &self,
22        formatter: &mut std::fmt::Formatter<'_>,
23        prefixmap: &PrefixMap,
24    ) -> Result<(), PrefixMapError> {
25        let pred_str = match &self.pred {
26            IriRef::Iri(iri) => prefixmap.qualify(iri),
27            IriRef::Prefixed { prefix, local } => {
28                let iri = prefixmap.resolve_prefix_local(prefix, local)?;
29                iri.to_string()
30            }
31        };
32        write!(formatter, "{} {} {} .", self.subj, pred_str, self.obj).map_err(|e| {
33            PrefixMapError::FormatError {
34                error: format!("{e}"),
35            }
36        })?;
37        Ok(())
38    }
39}