1use thiserror::Error;
2use std::result::Result;
3use super::{ring::Digest, Node};
4
5#[derive(Error, Debug)]
6pub enum DhtError {
7 #[error("No live replica for key digest {0}")]
8 NoLiveReplica(Digest),
9 #[error("Fail to join node {node}: {message}")]
10 JoinFailure {
11 node: Node,
12 message: String
13 },
14 #[error("Server error")]
15 ServerError(#[from] tokio::task::JoinError),
16 #[error("ServerManager error")]
17 ServerManagerError(#[from] tokio::sync::watch::error::SendError<bool>),
18 #[error("RPC error")]
19 RpcError(#[from] tarpc::client::RpcError),
20 #[error("IO error")]
21 IoError(#[from] std::io::Error)
22}
23
24pub type DhtResult<T> = Result<T, DhtError>;