cortexkit_bus_trait/
register.rs1use async_trait::async_trait;
2
3use crate::BusResult;
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
6pub struct Revision(pub u64);
7
8#[derive(Debug, Clone, PartialEq, Eq)]
9pub struct RegisterValue {
10 pub value: Vec<u8>,
11 pub revision: Revision,
12}
13
14#[derive(Debug, Clone, PartialEq, Eq)]
15pub struct RegisterEntry {
16 pub key: String,
17 pub value: Vec<u8>,
18 pub revision: Revision,
19}
20
21#[derive(Debug, Clone, PartialEq, Eq)]
22pub struct Tombstone {
23 pub key: String,
24 pub revision: Revision,
25}
26
27#[derive(Debug, Clone, PartialEq, Eq)]
28pub enum RegisterUpdate {
29 Put(RegisterEntry),
30 Delete(Tombstone),
31}
32
33#[derive(Debug, Clone, PartialEq, Eq)]
34pub enum WatchEvent {
35 Snapshot {
37 entries: Vec<RegisterEntry>,
38 revision: Revision,
39 },
40 Update(RegisterUpdate),
41}
42
43#[async_trait]
44pub trait RegisterWatch: Send {
45 async fn next(&mut self) -> BusResult<WatchEvent>;
46
47 fn has_snapshot(&self) -> bool;
49}
50
51#[async_trait]
52pub trait Register: Send + Sync {
53 type Watch: RegisterWatch;
54
55 async fn put(&self, key: &str, value: Vec<u8>) -> BusResult<Revision>;
56 async fn get(&self, key: &str) -> BusResult<RegisterValue>;
57 async fn delete(&self, key: &str) -> BusResult<Tombstone>;
58 async fn watch(&self, prefix: &str) -> BusResult<Self::Watch>;
59}