use thiserror::Error;
#[derive(Error, Debug)]
pub enum Error {
#[error("NATS error: {0}")]
Nats(#[from] async_nats::Error),
#[error("Connection error: {0}")]
Connect(#[from] async_nats::ConnectError),
#[error("Publish error: {0}")]
Publish(#[from] async_nats::PublishError),
#[error("Subscribe error: {0}")]
Subscribe(#[from] async_nats::SubscribeError),
#[cfg(feature = "msgpack")]
#[error("MessagePack serialization error: {0}")]
MsgPackSerialize(#[from] rmp_serde::encode::Error),
#[cfg(feature = "msgpack")]
#[error("MessagePack deserialization error: {0}")]
MsgPackDeserialize(#[from] rmp_serde::decode::Error),
#[cfg(feature = "json")]
#[error("JSON error: {0}")]
Json(#[from] serde_json::Error),
#[error("JetStream error: {0}")]
JetStream(String),
#[error("JetStream context error: {0}")]
JetStreamContext(#[from] async_nats::jetstream::context::CreateStreamError),
#[error("JetStream consumer error: {0}")]
JetStreamConsumer(String),
#[error("JetStream stream error: {0}")]
JetStreamStream(String),
#[error("Request error: {0}")]
Request(#[from] async_nats::RequestError),
#[error("Timeout")]
Timeout,
#[error("Subscriber closed")]
SubscriberClosed,
#[error("Publisher closed")]
PublisherClosed,
#[error("Invalid configuration: {0}")]
InvalidConfig(String),
}
pub type Result<T> = std::result::Result<T, Error>;