use serde::{Deserialize, Serialize};
use crate::{Membership, NodeId};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct JoinRequest {
pub protocol_version: u32,
pub node_id: NodeId,
pub advertise_addr: String,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum JoinResponse {
Accepted {
leader: NodeId,
membership: Membership,
},
Redirect {
leader: Option<NodeId>,
},
Rejected {
reason: JoinRejection,
},
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct PeerEntry {
pub node: NodeId,
pub addr: String,
}
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub struct PeerBook {
pub entries: Vec<PeerEntry>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum JoinRejection {
VersionSkew {
expected: u32,
got: u32,
},
JoinsDisabled,
Duplicate,
Other(String),
}