use std::time::Duration;
#[derive(Debug, thiserror::Error)]
pub enum DinkError {
#[error("connection error: {0}")]
Connection(String),
#[error("auth error: {0}")]
Auth(String),
#[error("service error: {service}.{method} - {code}: {message}")]
Service {
service: String,
method: String,
code: String,
message: String,
},
#[error("timeout after {0:?}")]
Timeout(Duration),
#[error("config error: {0}")]
Config(String),
#[error("webhook error: {0}")]
Webhook(String),
#[error("stream closed")]
StreamClosed,
#[error("unknown method: {0}")]
UnknownMethod(String),
#[error("serialization error: {0}")]
Serialization(#[from] serde_json::Error),
#[error("nats error: {0}")]
Nats(String),
}
impl From<async_nats::Error> for DinkError {
fn from(e: async_nats::Error) -> Self {
DinkError::Nats(e.to_string())
}
}
impl From<async_nats::RequestError> for DinkError {
fn from(e: async_nats::RequestError) -> Self {
DinkError::Nats(e.to_string())
}
}
impl From<async_nats::PublishError> for DinkError {
fn from(e: async_nats::PublishError) -> Self {
DinkError::Nats(e.to_string())
}
}
impl From<async_nats::SubscribeError> for DinkError {
fn from(e: async_nats::SubscribeError) -> Self {
DinkError::Nats(e.to_string())
}
}
pub type Result<T> = std::result::Result<T, DinkError>;