1use bytes::Bytes;
4use pollen_types::{Member, MemberState, NodeId, TaskId};
5use serde::{Deserialize, Serialize};
6use std::collections::HashMap;
7
8#[derive(Clone, Debug, Serialize, Deserialize)]
10pub struct MembershipUpdateMsg {
11 pub members: Vec<MemberInfo>,
13}
14
15#[derive(Clone, Debug, Serialize, Deserialize)]
17pub struct MemberInfo {
18 pub id: NodeId,
19 pub addr: String,
20 pub state: MemberState,
21 pub metadata: HashMap<String, String>,
22 pub incarnation: u64,
23}
24
25impl From<&Member> for MemberInfo {
26 fn from(m: &Member) -> Self {
27 Self {
28 id: m.id,
29 addr: m.addr.to_string(),
30 state: m.state,
31 metadata: m.metadata.clone(),
32 incarnation: 0,
33 }
34 }
35}
36
37#[derive(Clone, Debug, Serialize, Deserialize)]
39pub struct CrdtDeltaMsg {
40 pub key: String,
42 pub crdt_type: String,
44 pub delta: Bytes,
46 pub timestamp: u64,
48}
49
50#[derive(Clone, Debug, Serialize, Deserialize)]
52pub struct CrdtSyncRequestMsg {
53 pub keys: Vec<String>,
55}
56
57#[derive(Clone, Debug, Serialize, Deserialize)]
59pub struct CrdtFullSyncMsg {
60 pub entries: Vec<CrdtEntry>,
62}
63
64#[derive(Clone, Debug, Serialize, Deserialize)]
66pub struct CrdtEntry {
67 pub key: String,
68 pub crdt_type: String,
69 pub data: Bytes,
70 pub timestamp: u64,
71}
72
73#[derive(Clone, Debug, Serialize, Deserialize)]
75pub struct MerkleTreeRequestMsg {
76 pub depth: u32,
78 pub prefix: Option<String>,
80}
81
82#[derive(Clone, Debug, Serialize, Deserialize)]
84pub struct MerkleTreeResponseMsg {
85 pub nodes: Vec<MerkleNode>,
87 pub root_hash: Bytes,
89}
90
91#[derive(Clone, Debug, Serialize, Deserialize)]
93pub struct MerkleNode {
94 pub hash: Bytes,
95 pub range_start: String,
96 pub range_end: String,
97 pub children: Vec<Bytes>,
98}
99
100#[derive(Clone, Debug, Serialize, Deserialize)]
102pub struct DataRangeRequestMsg {
103 pub start: String,
105 pub end: String,
107}
108
109#[derive(Clone, Debug, Serialize, Deserialize)]
111pub struct DataRangeResponseMsg {
112 pub entries: Vec<CrdtEntry>,
114}
115
116#[derive(Clone, Debug, Serialize, Deserialize)]
118pub struct TaskClaimMsg {
119 pub task_id: TaskId,
121 pub instance_id: String,
123 pub version: u64,
125}
126
127#[derive(Clone, Debug, Serialize, Deserialize)]
129pub struct TaskClaimAckMsg {
130 pub success: bool,
132 pub instance_id: String,
134 pub version: u64,
136}
137
138#[derive(Clone, Debug, Serialize, Deserialize)]
140pub struct TaskCompleteMsg {
141 pub instance_id: String,
143 pub success: bool,
145 pub error: Option<String>,
147}