use borrow_or_share::Bos;
use iri_rfc3987::Iri;
use super::GeneralizedTerm;
use crate::NoExtension;
#[derive(Debug, Clone, PartialEq, Eq, Hash, serde::Serialize, serde::Deserialize)]
#[serde(
deny_unknown_fields,
bound(
serialize = "Text: serde::Serialize, Extension: serde::Serialize",
deserialize = "Text: serde::Deserialize<'de>, Iri<Text>: serde::Deserialize<'de>, Extension: serde::Deserialize<'de>"
)
)]
pub struct GeneralizedTriple<Text: Bos<str> + AsRef<str> = String, Extension = NoExtension> {
subject: GeneralizedTerm<Text, Extension>,
predicate: GeneralizedTerm<Text, Extension>,
object: GeneralizedTerm<Text, Extension>,
}
impl<Text: Bos<str> + AsRef<str>, Extension> GeneralizedTriple<Text, Extension> {
#[must_use]
pub const fn new(
subject: GeneralizedTerm<Text, Extension>,
predicate: GeneralizedTerm<Text, Extension>,
object: GeneralizedTerm<Text, Extension>,
) -> Self {
Self {
subject,
predicate,
object,
}
}
#[must_use]
pub const fn subject(&self) -> &GeneralizedTerm<Text, Extension> {
&self.subject
}
#[must_use]
pub const fn predicate(&self) -> &GeneralizedTerm<Text, Extension> {
&self.predicate
}
#[must_use]
pub const fn object(&self) -> &GeneralizedTerm<Text, Extension> {
&self.object
}
#[must_use]
pub fn into_parts(
self,
) -> (
GeneralizedTerm<Text, Extension>,
GeneralizedTerm<Text, Extension>,
GeneralizedTerm<Text, Extension>,
) {
(self.subject, self.predicate, self.object)
}
}
#[derive(Debug, Clone, PartialEq, Eq, Hash, serde::Serialize, serde::Deserialize)]
#[serde(
deny_unknown_fields,
bound(
serialize = "Text: serde::Serialize, Extension: serde::Serialize",
deserialize = "Text: serde::Deserialize<'de>, Iri<Text>: serde::Deserialize<'de>, Extension: serde::Deserialize<'de>"
)
)]
pub enum GeneralizedGraphName<Text: Bos<str> + AsRef<str> = String, Extension = NoExtension> {
Default,
Term(GeneralizedTerm<Text, Extension>),
}
#[derive(Debug, Clone, PartialEq, Eq, Hash, serde::Serialize, serde::Deserialize)]
#[serde(
deny_unknown_fields,
bound(
serialize = "Text: serde::Serialize, Extension: serde::Serialize",
deserialize = "Text: serde::Deserialize<'de>, Iri<Text>: serde::Deserialize<'de>, Extension: serde::Deserialize<'de>"
)
)]
pub struct GeneralizedQuad<Text: Bos<str> + AsRef<str> = String, Extension = NoExtension> {
triple: GeneralizedTriple<Text, Extension>,
graph: GeneralizedGraphName<Text, Extension>,
}
impl<Text: Bos<str> + AsRef<str>, Extension> GeneralizedQuad<Text, Extension> {
#[must_use]
pub const fn new(
triple: GeneralizedTriple<Text, Extension>,
graph: GeneralizedGraphName<Text, Extension>,
) -> Self {
Self { triple, graph }
}
#[must_use]
pub const fn triple(&self) -> &GeneralizedTriple<Text, Extension> {
&self.triple
}
#[must_use]
pub const fn graph(&self) -> &GeneralizedGraphName<Text, Extension> {
&self.graph
}
#[must_use]
pub fn into_parts(
self,
) -> (
GeneralizedTriple<Text, Extension>,
GeneralizedGraphName<Text, Extension>,
) {
(self.triple, self.graph)
}
}