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