use tower::BoxError;
pub type Result<T> = std::result::Result<T, Error>;
#[non_exhaustive]
#[derive(Debug, thiserror::Error)]
pub enum Error {
#[error("Serialization failed: {0}")]
Serialization(#[from] serde_json::Error),
#[error("get result failed: {0}")]
ErrResult(String),
#[error("param:{0} with error_message:{1}")]
InvalidParam(String, String),
#[error("request_id:{0:?} ret_code:{1} error_code:{2} message:{3:?}")]
ErrResponse(Option<String>, i32, i32, Option<String>),
#[cfg(feature = "config")]
#[error("config not found: {0}")]
ConfigNotFound(String),
#[cfg(feature = "config")]
#[error("config query conflict: {0}")]
ConfigQueryConflict(String),
#[error("remote client shutdown failed: {0}")]
ClientShutdown(String),
#[error("remote client unhealthy failed: {0}")]
ClientUnhealthy(String),
#[error("tonic grpc transport error: {0}")]
TonicGrpcTransport(#[from] tonic::transport::Error),
#[error("tonic grpc status error: {0}")]
TonicGrpcStatus(#[from] Box<tonic::Status>),
#[error("grpc request error: {0}")]
GrpcBufferRequest(#[from] BoxError),
#[error("no available server")]
NoAvailableServer,
#[error("Wrong server address: {0}")]
WrongServerAddress(String),
#[deprecated]
#[allow(unused)]
#[error("Exceeded maximum retry attempts: {0}")]
MaxRetriesExceeded(u32),
}