use bee_message::{payload::milestone::MilestoneId, Error as MessageError};
#[derive(Debug, thiserror::Error)]
pub enum Error {
#[error("I/O error: {0}")]
Io(#[from] std::io::Error),
#[error("Message error: {0}")]
Message(#[from] MessageError),
#[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),
}