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}