use serde::{Deserialize, Serialize};
use crate::{ipc::IpcMessage, signed::SignedMessage};
#[allow(clippy::large_enum_variant)]
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
pub enum ChainMessage {
Signed(SignedMessage),
Ipc(IpcMessage),
}
#[cfg(feature = "arb")]
mod arb {
use super::ChainMessage;
use crate::{ipc::IpcMessage, signed::SignedMessage};
impl quickcheck::Arbitrary for ChainMessage {
fn arbitrary(g: &mut quickcheck::Gen) -> Self {
match u8::arbitrary(g) % 2 {
0 => ChainMessage::Signed(SignedMessage::arbitrary(g)),
_ => ChainMessage::Ipc(IpcMessage::arbitrary(g)),
}
}
}
}
#[cfg(test)]
mod tests {
use crate::chain::ChainMessage;
use quickcheck_macros::quickcheck;
#[quickcheck]
fn chain_message_cbor(value0: ChainMessage) {
let repr = fvm_ipld_encoding::to_vec(&value0).expect("failed to encode");
let value1: ChainMessage =
fvm_ipld_encoding::from_slice(repr.as_ref()).expect("failed to decode");
assert_eq!(value1, value0)
}
}