use super::NodeState;
use serde::{Deserialize, Serialize};
use sn_consensus::Decision;
use std::{fmt, net::SocketAddr};
#[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)]
#[allow(clippy::large_enum_variant)]
pub struct JoinRequest {
pub section_key: bls::PublicKey,
}
impl JoinRequest {
pub fn section_key(&self) -> bls::PublicKey {
self.section_key
}
pub fn set_section_key(&mut self, section_key: bls::PublicKey) {
self.section_key = section_key;
}
}
#[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)]
pub enum JoinResponse {
Approved(Decision<NodeState>),
Rejected(JoinRejectReason),
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Serialize, Deserialize)]
pub enum JoinRejectReason {
JoinsDisallowed,
NodeNotReachable(SocketAddr),
}
impl fmt::Display for JoinRejectReason {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "{self:?}")
}
}