snarkos_errors/dpc/
ledger.rs

1// Copyright (C) 2019-2020 Aleo Systems Inc.
2// This file is part of the snarkOS library.
3
4// The snarkOS library is free software: you can redistribute it and/or modify
5// it under the terms of the GNU General Public License as published by
6// the Free Software Foundation, either version 3 of the License, or
7// (at your option) any later version.
8
9// The snarkOS library is distributed in the hope that it will be useful,
10// but WITHOUT ANY WARRANTY; without even the implied warranty of
11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12// GNU General Public License for more details.
13
14// You should have received a copy of the GNU General Public License
15// along with the snarkOS library. If not, see <https://www.gnu.org/licenses/>.
16
17use crate::{algorithms::MerkleError, objects::TransactionError, storage::StorageError};
18
19#[derive(Debug, Error)]
20pub enum LedgerError {
21    #[error("{}: {}", _0, _1)]
22    Crate(&'static str, String),
23
24    #[error("duplicate sn pushed to ledger")]
25    DuplicateMemo,
26
27    #[error("duplicate memo pushed to ledger")]
28    DuplicateSn,
29
30    #[error("database already exists")]
31    ExistingDatabase,
32
33    #[error("invalid cm pushed to ledger")]
34    InvalidCm,
35
36    #[error("invalid cm index during proving")]
37    InvalidCmIndex,
38
39    #[error("{}", _0)]
40    MerkleError(MerkleError),
41
42    #[error("{}", _0)]
43    Message(String),
44
45    #[error("{}", _0)]
46    StorageError(StorageError),
47
48    #[error("{}", _0)]
49    TransactionError(TransactionError),
50}
51
52impl From<std::io::Error> for LedgerError {
53    fn from(error: std::io::Error) -> Self {
54        LedgerError::Crate("std::io", format!("{:?}", error))
55    }
56}
57
58impl From<MerkleError> for LedgerError {
59    fn from(error: MerkleError) -> Self {
60        LedgerError::MerkleError(error)
61    }
62}
63
64impl From<StorageError> for LedgerError {
65    fn from(error: StorageError) -> Self {
66        LedgerError::StorageError(error)
67    }
68}
69
70impl From<TransactionError> for LedgerError {
71    fn from(error: TransactionError) -> Self {
72        LedgerError::TransactionError(error)
73    }
74}