1use super::*;
2
3#[derive(Debug, Clone, PartialEq, Eq, Hash)]
4pub struct DefaultTuple {
5 pub object: Entity,
6 pub relation: Relation,
7 pub subject: DefaultSubject,
8}
9
10impl DefaultTuple {
11 pub fn new(object: Entity, relation: Relation, subject: DefaultSubject) -> Self {
12 Self {
13 object,
14 relation,
15 subject,
16 }
17 }
18
19 pub fn to_tuple(&self) -> Tuple {
20 Tuple {
21 object: self.object.to_object(),
22 relation: self.relation.to_string(),
23 subject: self.subject.to_subject(),
24 }
25 }
26
27 pub fn from_tuple(tuple: &Tuple) -> Option<Self> {
28 Some(Self {
29 object: Entity::from_object(&tuple.object)?,
30 relation: Relation::from_str(&tuple.relation)?,
31 subject: DefaultSubject::from_subject(&tuple.subject)?,
32 })
33 }
34}
35
36impl From<&DefaultTuple> for Tuple {
37 fn from(value: &DefaultTuple) -> Self {
38 value.to_tuple()
39 }
40}
41
42impl From<DefaultTuple> for Tuple {
43 fn from(value: DefaultTuple) -> Self {
44 value.to_tuple()
45 }
46}
47
48#[derive(Debug, Clone, PartialEq, Eq, Hash)]
49pub enum DefaultTupleUpdate {
50 Write(DefaultTuple),
51 Delete(DefaultTuple),
52}
53
54impl From<DefaultTupleUpdate> for TupleUpdate {
55 fn from(value: DefaultTupleUpdate) -> Self {
56 match value {
57 DefaultTupleUpdate::Write(tuple) => TupleUpdate::Write(tuple.into()),
58 DefaultTupleUpdate::Delete(tuple) => TupleUpdate::Delete(tuple.into()),
59 }
60 }
61}