use openraft_macros::VariantName;
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
#[derive(VariantName)]
#[variant_name(prefix = "Ext::")]
pub enum ExternalCommandName {
Elect,
Heartbeat,
Snapshot,
PurgeLog,
TriggerTransferLeader,
AllowNextRevert,
SetMetricsRecorder,
RefreshServerState,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
#[derive(VariantName)]
pub enum RaftMsgName {
AppendEntries,
RequestVote,
RequestPreVote,
InstallSnapshot,
ClientWrite,
GetLinearizer,
Initialize,
ChangeMembership,
HandleTransferLeader,
WithRaftState,
ExternalCommand(ExternalCommandName),
GetRuntimeStats,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_external_command_name_index() {
assert_eq!(ExternalCommandName::COUNT, ExternalCommandName::ALL.len());
for (i, name) in ExternalCommandName::ALL.iter().enumerate() {
assert_eq!(
name.index(),
i,
"ExternalCommandName::{:?} index mismatch: expected {}, got {}",
name,
i,
name.index()
);
}
}
#[test]
fn test_raft_msg_name_index() {
assert_eq!(RaftMsgName::COUNT, RaftMsgName::ALL.len());
for (i, name) in RaftMsgName::ALL.iter().enumerate() {
assert_eq!(
name.index(),
i,
"RaftMsgName::{:?} index mismatch: expected {}, got {}",
name,
i,
name.index()
);
}
}
}