use bincode;
use failure::Fail;
use crate::honey_badger;
use crate::sync_key_gen;
#[derive(Debug, Fail)]
pub enum Error {
#[fail(display = "Error serializing a key gen message: {}", _0)]
SerializeKeyGen(bincode::ErrorKind),
#[fail(display = "Error serializing a vote: {}", _0)]
SerializeVote(bincode::ErrorKind),
#[fail(display = "Error proposing a contribution in HoneyBadger: {}", _0)]
ProposeHoneyBadger(honey_badger::Error),
#[fail(display = "Error handling a HoneyBadger message: {}", _0)]
HandleHoneyBadgerMessage(honey_badger::Error),
#[fail(display = "Error handling SyncKeyGen message: {}", _0)]
SyncKeyGen(sync_key_gen::Error),
#[fail(display = "Unknown sender")]
UnknownSender,
}
pub type Result<T> = ::std::result::Result<T, Error>;
#[derive(Clone, Debug, Fail, PartialEq)]
pub enum FaultKind {
#[fail(
display = "`DynamicHoneyBadger` received a key generation message with an invalid signature."
)]
InvalidKeyGenMessageSignature,
#[fail(
display = "`DynamicHoneyBadger` received a key generation message with an invalid era."
)]
InvalidKeyGenMessageEra,
#[fail(
display = "`DynamicHoneyBadger` received a key generation message when there was no key
generation in progress."
)]
UnexpectedKeyGenMessage,
#[fail(
display = "`DynamicHoneyBadger` received a signed `Ack` when no key generation in progress."
)]
UnexpectedKeyGenAck,
#[fail(
display = "`DynamicHoneyBadger` received a signed `Part` when no key generation in progress."
)]
UnexpectedKeyGenPart,
#[fail(
display = "`DynamicHoneyBadger` received more key generation messages from the peer than
expected."
)]
TooManyKeyGenMessages,
#[fail(
display = "`DynamicHoneyBadger` received a message (Accept, Propose, or Change
with an invalid signature."
)]
IncorrectPayloadSignature,
#[fail(display = "`DynamicHoneyBadger`/`SyncKeyGen` received an invalid `Ack` message.")]
SyncKeyGenAck(sync_key_gen::AckFault),
#[fail(display = "`DynamicHoneyBadger`/`SyncKeyGen` received an invalid `Part` message.")]
SyncKeyGenPart(sync_key_gen::PartFault),
#[fail(display = "`DynamicHoneyBadger` received a change vote with an invalid signature.")]
InvalidVoteSignature,
#[fail(display = "A validator committed an invalid vote in `DynamicHoneyBadger`.")]
InvalidCommittedVote,
#[fail(display = "`DynamicHoneyBadger` received a message with an invalid era.")]
UnexpectedDhbMessageEra,
#[fail(display = "`DynamicHoneyBadger` received a fault from `HoneyBadger`.")]
HbFault(honey_badger::FaultKind),
}