ipld_hamt/
error.rs

1// Copyright 2020 ChainSafe Systems
2// SPDX-License-Identifier: Apache-2.0, MIT
3
4use forest_encoding::Error as EncodingError;
5use std::error::Error as StdError;
6use thiserror::Error;
7
8/// HAMT Error
9#[derive(Debug, Error)]
10pub enum Error {
11    /// Maximum depth error
12    #[error("Maximum depth reached")]
13    MaxDepth,
14    /// Hash bits does not support greater than 8 bit width
15    #[error("HashBits does not support retrieving more than 8 bits")]
16    InvalidHashBitLen,
17    /// This should be treated as a fatal error, must have at least one pointer in node
18    #[error("Invalid HAMT format, node cannot have 0 pointers")]
19    ZeroPointers,
20    /// Cid not found in store error
21    #[error("Cid ({0}) did not match any in database")]
22    CidNotFound(String),
23    /// Dynamic error for when the error needs to be forwarded as is.
24    #[error("{0}")]
25    Dynamic(Box<dyn StdError>),
26    /// Custom HAMT error
27    #[error("{0}")]
28    Other(String),
29}
30
31impl From<EncodingError> for Error {
32    fn from(e: EncodingError) -> Self {
33        Self::Dynamic(Box::new(e))
34    }
35}
36
37impl From<Box<dyn StdError>> for Error {
38    fn from(e: Box<dyn StdError>) -> Self {
39        Self::Dynamic(e)
40    }
41}