This repository was archived by the owner on Nov 18, 2023. It is now read-only.
-
-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy pathevent.rs
72 lines (67 loc) · 1.5 KB
/
event.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
use crate::{
content::Content,
patch::{AttributePatch, ContentPatch, OperandPatch},
rules::{NodeOperation, Rules, SpaceOperation},
user::UserId,
};
use deskc_ids::NodeId;
use uuid::Uuid;
use crate::projection::Projection;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct EventId(pub Uuid);
impl EventId {
pub fn new() -> Self {
Self(Uuid::new_v4())
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Event {
pub id: EventId,
pub user_id: UserId,
pub payload: EventPayload,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum EventPayload {
AddOwner {
user_id: UserId,
},
RemoveOwner {
user_id: UserId,
},
UpdateSpaceRules {
rules: Rules<SpaceOperation>,
},
CreateNode {
node_id: NodeId,
content: Content,
},
RemoveNode {
node_id: NodeId,
},
PatchContent {
node_id: NodeId,
patch: ContentPatch,
},
PatchOperand {
node_id: NodeId,
patch: OperandPatch,
},
PatchAttribute {
node_id: NodeId,
patch: AttributePatch,
},
UpdateNodeRules {
node_id: NodeId,
rules: Rules<NodeOperation>,
},
UpdateOperandRules {
node_id: NodeId,
rules: Rules<NodeOperation>,
},
AddSnapshot {
/// current index of events
/// if the index of this event is not index+1, this event must be
index: usize,
snapshot: Box<Projection>,
},
}