1use std::io;
3
4use crossbeam_channel as chan;
5use thiserror::Error;
6
7use nakamoto_chain as chain;
8use nakamoto_common as common;
9use nakamoto_p2p as p2p;
10
11use p2p::fsm::Command;
12
13#[derive(Error, Debug)]
15pub enum Error {
16 #[error(transparent)]
18 Handle(#[from] crate::handle::Error),
19 #[error(transparent)]
21 Net(#[from] nakamoto_net::error::Error),
22 #[error(transparent)]
24 Chain(#[from] common::block::tree::Error),
25 #[error(transparent)]
27 Io(#[from] io::Error),
28 #[error(transparent)]
30 BlockStore(#[from] common::block::store::Error),
31 #[error(transparent)]
33 FilterStore(#[from] chain::filter::store::Error),
34 #[error("error loading peers: {0}")]
36 PeerStore(io::Error),
37 #[error("command channel disconnected")]
39 Channel,
40}
41
42impl From<chan::SendError<Command>> for Error {
43 fn from(_: chan::SendError<Command>) -> Self {
44 Self::Channel
45 }
46}
47
48impl From<chan::RecvError> for Error {
49 fn from(_: chan::RecvError) -> Self {
50 Self::Channel
51 }
52}