use std::io::Cursor;
use openraft::BasicNode;
use serde::{Deserialize, Serialize};
pub type NodeId = u64;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum RaftRequest {
AssignRealm { realm: String, owner_node: NodeId },
ReleaseRealm { realm: String },
AcquireLease {
realm: String,
holder: NodeId,
duration_secs: u64,
},
ReleaseLease { realm: String, holder: NodeId },
RenewLease {
realm: String,
holder: NodeId,
duration_secs: u64,
},
RegisterNode { node_id: NodeId, addr: String },
DeregisterNode { node_id: NodeId },
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum RaftResponse {
Ok,
LeaseConflict {
holder: NodeId,
expires_at_epoch_secs: u64,
},
LeaseRenewalFailed { realm: String },
NodeRegistered { node_id: NodeId },
RealmAssigned { realm: String, owner: NodeId },
}
openraft::declare_raft_types!(
pub TypeConfig:
D = RaftRequest,
R = RaftResponse,
Node = BasicNode,
);