bee_ledger_types/
error.rs

1// Copyright 2020-2021 IOTA Stiftung
2// SPDX-License-Identifier: Apache-2.0
3
4use core::{convert::Infallible, num::TryFromIntError};
5
6use bee_block::{payload::milestone::MilestoneId, Error as BlockError};
7
8/// Errors related to ledger types.
9#[derive(Debug, thiserror::Error)]
10pub enum Error {
11    /// I/O error.
12    #[error("i/o error: {0}")]
13    Io(#[from] std::io::Error),
14    /// Block error.
15    #[error("block error: {0}")]
16    Block(#[from] BlockError),
17    /// Invalid output count error.
18    #[error("Invalid output count: {0}")]
19    InvalidOutputCount(TryFromIntError),
20    /// Unsupported output kind.
21    #[error("unsupported output kind: {0}")]
22    UnsupportedOutputKind(u8),
23    /// Unsupported input kind.
24    #[error("unsupported input kind: {0}")]
25    UnsupportedInputKind(u8),
26    /// Unsupported payload kind.
27    #[error("unsupported payload kind: {0}")]
28    UnsupportedPayloadKind(u32),
29    /// Invalid payload kind.
30    #[error("invalid payload kind: {0}")]
31    InvalidPayloadKind(u32),
32    /// Treasury amount mismatch.
33    #[error("treasury amount mismatch: {0} != {1}")]
34    TreasuryAmountMismatch(u64, u64),
35    /// Migrated funds amount overflow.
36    #[error("migrated funds amount overflow: {0}")]
37    MigratedFundsAmountOverflow(u128),
38    /// Invalid migrated funds amount.
39    #[error("invalid migrated funds amount: {0}")]
40    InvalidMigratedFundsAmount(u64),
41    /// Consumed treasury output mismatch.
42    #[error("consumed treasury output mismatch: {0} != {1}")]
43    ConsumedTreasuryOutputMismatch(MilestoneId, MilestoneId),
44    /// Negative balance.
45    #[error("negative balance: {0}")]
46    NegativeBalance(i64),
47    /// Negative dust allowance.
48    #[error("negative dust allowance: {0}")]
49    NegativeDustAllowance(i64),
50    /// Negative dust outputs.
51    #[error("negative dust outputs: {0}")]
52    NegativeDustOutputs(i64),
53    /// Balance overflow.
54    #[error("balance overflow: {0}")]
55    BalanceOverflow(i128),
56    /// Invalid balance.
57    #[error("invalid balance: {0}")]
58    InvalidBalance(u64),
59    /// Balance diff overflow.
60    #[error("balance diff overflow: {0}")]
61    BalanceDiffOverflow(i128),
62    /// Invalid balance diff.
63    #[error("invalid balance diff: {0}")]
64    InvalidBalanceDiff(i64),
65    /// Packable option error happened.
66    #[error("packable option error happened")]
67    PackableOption,
68    /// Invalid snapshot kind.
69    #[error("invalid snapshot kind: {0}")]
70    InvalidSnapshotKind(u8),
71    /// Unsupported snapshot version.
72    #[error("unsupported snapshot version: supports {0}, read {1}")]
73    UnsupportedVersion(u8, u8),
74    /// Missing consumed treasury.
75    #[error("missing consumed treasury")]
76    MissingConsumedTreasury,
77    /// Milestone length mismatch.
78    #[error("milestone length mismatch: expected {0}, got {1}")]
79    MilestoneLengthMismatch(usize, usize),
80}
81
82impl From<Infallible> for Error {
83    fn from(err: Infallible) -> Self {
84        match err {}
85    }
86}