use num_derive::{FromPrimitive, ToPrimitive};
#[derive(FromPrimitive, ToPrimitive, PartialEq, Debug)]
pub enum Message {
PendingTxs = 0,
StateSyncDone,
StopVertex,
}
impl Message {
pub fn as_str(&self) -> &str {
match self {
Message::PendingTxs => "Pending Transactions",
Message::StateSyncDone => "State Sync Done",
Message::StopVertex => "Pending Stop Vertex",
}
}
}
impl TryFrom<u32> for Message {
type Error = String;
fn try_from(v: u32) -> Result<Self, Self::Error> {
match v {
x if x == Message::PendingTxs as u32 => Ok(Message::PendingTxs),
x if x == Message::StateSyncDone as u32 => Ok(Message::StateSyncDone),
x if x == Message::StopVertex as u32 => Ok(Message::StopVertex),
_ => Err("invalid message enum".to_string()),
}
}
}
#[test]
fn test_message() {
let m = Message::try_from(0).unwrap();
assert_eq!(m, Message::PendingTxs);
assert!(m.as_str().contains("Pending Transactions"));
assert!(Message::try_from(5).is_err());
}