use serde::{Deserialize, Serialize};
use crate::{Membership, NodeId};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct LeaveRequest {
pub protocol_version: u32,
pub node_id: NodeId,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum LeaveResponse {
Accepted {
leader: NodeId,
membership: Membership,
},
Redirect {
leader: Option<NodeId>,
},
Rejected {
reason: LeaveRejection,
},
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum LeaveRejection {
VersionSkew {
expected: u32,
got: u32,
},
LeavesDisabled,
NotMember,
LastMember,
Other(String),
}