Skip to main content

coil_auth/types/
tuple.rs

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}