1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
use libipld::cid::Error as CidError;
use libipld::error::{Error as IpldError, StoreError};
use libp2p::core::transport::TransportError;
use sled::transaction::TransactionError;
use sled::Error as SledError;
use std::io::Error as IoError;
use thiserror::Error;

#[derive(Debug, Error)]
pub enum Error {
    #[error(transparent)]
    Sled(#[from] SledError),
    #[error(transparent)]
    Transaction(#[from] TransactionError),
    #[error(transparent)]
    Cid(#[from] CidError),
    #[error(transparent)]
    Transport(#[from] TransportError<IoError>),
    #[error(transparent)]
    Ipld(#[from] IpldError),
    #[error(transparent)]
    Io(#[from] IoError),
    #[error("empty batch")]
    EmptyBatch,
}

impl From<Error> for StoreError {
    fn from(error: Error) -> Self {
        if let Error::EmptyBatch = error {
            return Self::EmptyBatch;
        }
        Self::Other(Box::new(error))
    }
}