use serde::{Deserialize, Serialize};
#[derive(
Debug,
Clone,
PartialEq,
Eq,
Serialize,
Deserialize,
zerompk::ToMessagePack,
zerompk::FromMessagePack,
)]
pub enum Compensation {
RemoveLearner { group_id: u64, peer_id: u64 },
RemoveVoter { group_id: u64, peer_id: u64 },
RestoreLeaderHint { group_id: u64, peer_id: u64 },
RemoveGhostStub { vshard_id: u32 },
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn compensation_zerompk_roundtrip() {
let cases = [
Compensation::RemoveLearner {
group_id: 1,
peer_id: 42,
},
Compensation::RemoveVoter {
group_id: 2,
peer_id: 7,
},
Compensation::RestoreLeaderHint {
group_id: 3,
peer_id: 99,
},
Compensation::RemoveGhostStub { vshard_id: 10 },
];
for c in &cases {
let bytes = zerompk::to_msgpack_vec(c).expect("encode");
let decoded: Compensation = zerompk::from_msgpack(&bytes).expect("decode");
assert_eq!(*c, decoded);
}
}
}