rdf_model/alloc/
heap_quad.rs

1// This is free and unencumbered software released into the public domain.
2
3use crate::{HeapTerm, Statement, Term};
4
5/// A heap-allocated quad statement.
6#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
7#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
8pub struct HeapQuad {
9    s: HeapTerm,
10    p: HeapTerm,
11    o: HeapTerm,
12    g: Option<HeapTerm>,
13}
14
15impl Statement for HeapQuad {
16    fn subject(&self) -> &dyn Term {
17        &self.s
18    }
19
20    fn predicate(&self) -> &dyn Term {
21        &self.p
22    }
23
24    fn object(&self) -> &dyn Term {
25        &self.o
26    }
27
28    fn context(&self) -> Option<&dyn Term> {
29        self.g.as_ref().map(|g| g as &dyn Term)
30    }
31}
32
33impl From<(HeapTerm, HeapTerm, HeapTerm)> for HeapQuad {
34    fn from((s, p, o): (HeapTerm, HeapTerm, HeapTerm)) -> Self {
35        Self { s, p, o, g: None }
36    }
37}
38
39impl From<(HeapTerm, HeapTerm, HeapTerm, HeapTerm)> for HeapQuad {
40    fn from((s, p, o, g): (HeapTerm, HeapTerm, HeapTerm, HeapTerm)) -> Self {
41        Self {
42            s,
43            p,
44            o,
45            g: Some(g),
46        }
47    }
48}