use thiserror::Error;
use crate::discovery::DiscoveryError;
pub type EtcdDiscoveryResult<T> = Result<T, EtcdDiscoveryError>;
#[derive(Debug, Error)]
pub enum EtcdDiscoveryError {
#[error("etcd discovery codec error: {0}")]
Codec(#[from] serde_json::Error),
#[error("etcd discovery requires at least one endpoint")]
MissingEndpoint,
#[error("invalid etcd discovery configuration: {0}")]
InvalidConfig(String),
#[error("etcd registry is not connected; call EtcdRegistry::connect before use")]
NotConnected,
#[error("etcd service `{service}` does not have instance `{id}`")]
MissingInstance { service: String, id: String },
#[error("invalid etcd discovery key `{0}`")]
InvalidKey(String),
#[error("etcd operation `{operation}` timed out")]
Timeout { operation: &'static str },
#[error("etcd lease error: {0}")]
Lease(String),
#[error("etcd watch error: {0}")]
Watch(String),
#[error("etcd backend error: {0}")]
Backend(String),
}
impl EtcdDiscoveryError {
pub(crate) fn into_discovery_error(self) -> DiscoveryError {
match self {
Self::MissingInstance { service, id } => {
DiscoveryError::MissingInstance { service, id }
}
error => DiscoveryError::Resolve {
host: "etcd".to_string(),
message: error.to_string(),
},
}
}
}