rdf_model/alloc/
heap_quad.rs1use crate::{HeapTerm, Statement, Term};
4
5#[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}