use bincode;
use thiserror::Error;
use crate::fault_log;
use crate::subset;
use crate::threshold_decrypt;
#[derive(Debug, Error)]
pub enum Error {
#[error("Error serializing contribution: {0}")]
ProposeBincode(bincode::ErrorKind),
#[error("Failed to instantiate Subset: {0}")]
CreateSubset(subset::Error),
#[error("Failed to input contribution to Subset: {0}")]
InputSubset(subset::Error),
#[error("Failed to handle Subset message: {0}")]
HandleSubsetMessage(subset::Error),
#[error("Threshold decryption error: {0}")]
ThresholdDecrypt(threshold_decrypt::Error),
#[error("Unknown sender")]
UnknownSender,
}
pub type Result<T> = ::std::result::Result<T, Error>;
#[derive(Clone, Debug, Error, PartialEq, Eq)]
pub enum FaultKind {
#[error("`HoneyBadger` received a decryption share for an unaccepted proposer.")]
UnexpectedDecryptionShare,
#[error("`HoneyBadger` was unable to deserialize a proposer's ciphertext.")]
DeserializeCiphertext,
#[error("`HoneyBadger` received an invalid ciphertext from the proposer.")]
InvalidCiphertext,
#[error("`HoneyBadger` received a message with an invalid epoch.")]
UnexpectedHbMessageEpoch,
#[error(
"`HoneyBadger` could not deserialize bytes (i.e. a serialized Batch) from a
given proposer into a vector of transactions."
)]
BatchDeserializationFailed,
#[error("`HoneyBadger` received a fault from `Subset`.")]
SubsetFault(subset::FaultKind),
#[error("`HoneyBadger` received a fault from `ThresholdDecrypt`.")]
DecryptionFault(threshold_decrypt::FaultKind),
}
pub type FaultLog<N> = fault_log::FaultLog<N, FaultKind>;