Skip to main content

nl3/
triple.rs

1//! The triple data structures.
2
3#[cfg(feature = "serde")]
4use serde::{Deserialize, Serialize};
5
6/// One end of a triple — a subject or an object.
7#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
8#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
9pub struct Term {
10    /// The entity type, e.g. `user` or `message` (JS `type`).
11    pub ty: Option<String>,
12    /// The entity value, e.g. `bob` or `42`.
13    pub value: Option<String>,
14}
15
16/// The predicate (relation) of a triple.
17///
18/// `ty` is always `None`: the original `lib/predicate/type.js` is an
19/// unimplemented stub that returns `undefined`.
20#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
21#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
22pub struct Predicate {
23    /// Predicate type — always `None` (not implemented upstream).
24    pub ty: Option<String>,
25    /// The mapped predicate, e.g. `message` or `follow`.
26    pub value: Option<String>,
27}
28
29/// A parsed Subject–Predicate–Object triple.
30#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
31#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
32pub struct Triple {
33    /// The subject — the entity the statement is about.
34    pub subject: Term,
35    /// The predicate — the relation connecting subject and object.
36    pub predicate: Predicate,
37    /// The object — the entity the subject relates to.
38    pub object: Term,
39}