use serde::{Deserialize, Serialize};
use crate::NodeId;
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum CatalogCommand {
AddGroups {
from_len: u32,
new_groups: Vec<u32>,
},
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct CatalogAddRequest {
pub protocol_version: u32,
pub add_groups: u32,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum CatalogAddResponse {
Accepted {
leader: NodeId,
catalog_len: u32,
new_groups: Vec<u32>,
},
Redirect {
leader: Option<NodeId>,
},
Rejected {
reason: CatalogRejection,
},
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum CatalogRejection {
VersionSkew {
expected: u32,
got: u32,
},
NotMultiRaft,
InvalidExpansion(String),
Other(String),
}