use core::{convert::Infallible, num::TryFromIntError};
use bee_block::{payload::milestone::MilestoneId, Error as BlockError};
#[derive(Debug, thiserror::Error)]
pub enum Error {
#[error("i/o error: {0}")]
Io(#[from] std::io::Error),
#[error("block error: {0}")]
Block(#[from] BlockError),
#[error("Invalid output count: {0}")]
InvalidOutputCount(TryFromIntError),
#[error("unsupported output kind: {0}")]
UnsupportedOutputKind(u8),
#[error("unsupported input kind: {0}")]
UnsupportedInputKind(u8),
#[error("unsupported payload kind: {0}")]
UnsupportedPayloadKind(u32),
#[error("invalid payload kind: {0}")]
InvalidPayloadKind(u32),
#[error("treasury amount mismatch: {0} != {1}")]
TreasuryAmountMismatch(u64, u64),
#[error("migrated funds amount overflow: {0}")]
MigratedFundsAmountOverflow(u128),
#[error("invalid migrated funds amount: {0}")]
InvalidMigratedFundsAmount(u64),
#[error("consumed treasury output mismatch: {0} != {1}")]
ConsumedTreasuryOutputMismatch(MilestoneId, MilestoneId),
#[error("negative balance: {0}")]
NegativeBalance(i64),
#[error("negative dust allowance: {0}")]
NegativeDustAllowance(i64),
#[error("negative dust outputs: {0}")]
NegativeDustOutputs(i64),
#[error("balance overflow: {0}")]
BalanceOverflow(i128),
#[error("invalid balance: {0}")]
InvalidBalance(u64),
#[error("balance diff overflow: {0}")]
BalanceDiffOverflow(i128),
#[error("invalid balance diff: {0}")]
InvalidBalanceDiff(i64),
#[error("packable option error happened")]
PackableOption,
#[error("invalid snapshot kind: {0}")]
InvalidSnapshotKind(u8),
#[error("unsupported snapshot version: supports {0}, read {1}")]
UnsupportedVersion(u8, u8),
#[error("missing consumed treasury")]
MissingConsumedTreasury,
#[error("milestone length mismatch: expected {0}, got {1}")]
MilestoneLengthMismatch(usize, usize),
}
impl From<Infallible> for Error {
fn from(err: Infallible) -> Self {
match err {}
}
}