#[derive(Debug)]
pub enum RegistryError {
#[cfg(feature = "remote")]
SwarmNotBootstrapped,
BadActorType,
NameAlreadyRegistered,
#[cfg(feature = "remote")]
QuorumFailed {
quorum: std::num::NonZero<usize>,
},
#[cfg(feature = "remote")]
Timeout,
#[cfg(feature = "remote")]
Store(libp2p::kad::store::Error),
#[cfg(feature = "remote")]
InvalidActorRegistration(crate::remote::registry::InvalidActorRegistration),
#[cfg(feature = "remote")]
GetProviders(libp2p::kad::GetProvidersError),
}
impl fmt::Display for RegistryError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
#[cfg(feature = "remote")]
RegistryError::SwarmNotBootstrapped => write!(f, "actor swarm not bootstrapped"),
RegistryError::NameAlreadyRegistered => write!(f, "name already registered"),
RegistryError::BadActorType => write!(f, "bad actor type"),
#[cfg(feature = "remote")]
RegistryError::QuorumFailed { quorum } => {
write!(f, "the quorum failed; needed {quorum} peers")
}
#[cfg(feature = "remote")]
RegistryError::Timeout => write!(f, "the request timed out"),
#[cfg(feature = "remote")]
RegistryError::Store(err) => err.fmt(f),
#[cfg(feature = "remote")]
RegistryError::InvalidActorRegistration(err) => err.fmt(f),
#[cfg(feature = "remote")]
RegistryError::GetProviders(err) => err.fmt(f),
}
}
}
impl error::Error for RegistryError {}
#[cfg(feature = "remote")]
impl From<crate::remote::registry::InvalidActorRegistration> for RegistryError {
fn from(err: crate::remote::registry::InvalidActorRegistration) -> Self {
RegistryError::InvalidActorRegistration(err)
}
}
#[cfg(feature = "remote")]
impl From<libp2p::kad::store::Error> for RegistryError {
fn from(err: libp2p::kad::store::Error) -> Self {
RegistryError::Store(err)
}
}
#[cfg(feature = "remote")]
impl From<libp2p::kad::AddProviderError> for RegistryError {
fn from(err: libp2p::kad::AddProviderError) -> Self {
match err {
libp2p::kad::AddProviderError::Timeout { .. } => RegistryError::Timeout,
}
}
}
#[cfg(feature = "remote")]
impl From<libp2p::kad::PutRecordError> for RegistryError {
fn from(err: libp2p::kad::PutRecordError) -> Self {
match err {
libp2p::kad::PutRecordError::QuorumFailed { quorum, .. } => {
RegistryError::QuorumFailed { quorum }
}
libp2p::kad::PutRecordError::Timeout { .. } => RegistryError::Timeout,
}
}
}
#[cfg(feature = "remote")]
impl From<libp2p::kad::GetProvidersError> for RegistryError {
fn from(err: libp2p::kad::GetProvidersError) -> Self {
RegistryError::GetProviders(err)
}
}