use crate::{config::TransportConfig, types::ProtocolName};
use sc_network_types::{multiaddr::Multiaddr, PeerId};
use std::fmt;
pub type Result<T> = std::result::Result<T, Error>;
#[derive(thiserror::Error)]
pub enum Error {
#[error(transparent)]
Io(#[from] std::io::Error),
#[error(transparent)]
Client(#[from] Box<sp_blockchain::Error>),
#[error(
"The same bootnode (`{address}`) is registered with two different peer ids: `{first_id}` and `{second_id}`"
)]
DuplicateBootnode {
address: Multiaddr,
first_id: PeerId,
second_id: PeerId,
},
#[error(transparent)]
Prometheus(#[from] prometheus_endpoint::PrometheusError),
#[error(
"The following addresses are invalid because they don't match the transport: {addresses:?}"
)]
AddressesForAnotherTransport {
transport: TransportConfig,
addresses: Vec<Multiaddr>,
},
#[error("Request-response protocol registered multiple times: {protocol}")]
DuplicateRequestResponseProtocol {
protocol: ProtocolName,
},
#[error("Peer `{0}` does not exist.")]
PeerDoesntExist(PeerId),
#[error("Channel closed")]
ChannelClosed,
#[error("Connection closed")]
ConnectionClosed,
#[error("Litep2p error: `{0}`")]
Litep2p(litep2p::Error),
}
impl fmt::Debug for Error {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
fmt::Display::fmt(self, f)
}
}