shex_ast 0.2.19

RDF data shapes implementation in Rust
Documentation
use rbe::Key;
use rudof_iri::IriS;
use serde::Serialize;
use std::fmt::Display;

#[derive(PartialEq, Eq, Hash, Debug, Default, Clone, Serialize)]
pub struct Pred {
    iri: IriS,
    is_direct: bool,
}

impl Pred {
    pub fn new(iri: IriS, is_direct: bool) -> Self {
        Pred { iri, is_direct }
    }

    pub fn new_unchecked(str: &str) -> Self {
        Pred {
            iri: IriS::new_unchecked(str),
            is_direct: true,
        }
    }

    pub fn iri(&self) -> &IriS {
        &self.iri
    }

    pub fn is_direct(&self) -> bool {
        self.is_direct
    }
}

impl Display for Pred {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        if self.is_direct {
            write!(f, "{}", self.iri)
        } else {
            write!(f, "^{}", self.iri)
        }
    }
}

impl From<IriS> for Pred {
    fn from(iri: IriS) -> Self {
        Pred { iri, is_direct: true }
    }
}

impl Key for Pred {}