use bytes::Bytes;
use pollen_types::{Member, MemberState, NodeId, TaskId};
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct MembershipUpdateMsg {
pub members: Vec<MemberInfo>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct MemberInfo {
pub id: NodeId,
pub addr: String,
pub state: MemberState,
pub metadata: HashMap<String, String>,
pub incarnation: u64,
}
impl From<&Member> for MemberInfo {
fn from(m: &Member) -> Self {
Self {
id: m.id,
addr: m.addr.to_string(),
state: m.state,
metadata: m.metadata.clone(),
incarnation: 0,
}
}
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct CrdtDeltaMsg {
pub key: String,
pub crdt_type: String,
pub delta: Bytes,
pub timestamp: u64,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct CrdtSyncRequestMsg {
pub keys: Vec<String>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct CrdtFullSyncMsg {
pub entries: Vec<CrdtEntry>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct CrdtEntry {
pub key: String,
pub crdt_type: String,
pub data: Bytes,
pub timestamp: u64,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct MerkleTreeRequestMsg {
pub depth: u32,
pub prefix: Option<String>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct MerkleTreeResponseMsg {
pub nodes: Vec<MerkleNode>,
pub root_hash: Bytes,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct MerkleNode {
pub hash: Bytes,
pub range_start: String,
pub range_end: String,
pub children: Vec<Bytes>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct DataRangeRequestMsg {
pub start: String,
pub end: String,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct DataRangeResponseMsg {
pub entries: Vec<CrdtEntry>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct TaskClaimMsg {
pub task_id: TaskId,
pub instance_id: String,
pub version: u64,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct TaskClaimAckMsg {
pub success: bool,
pub instance_id: String,
pub version: u64,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct TaskCompleteMsg {
pub instance_id: String,
pub success: bool,
pub error: Option<String>,
}