use tonic::Status;
pub type Result<T> = core::result::Result<T, Error>;
#[derive(Clone, thiserror::Error, Debug)]
pub enum Error {
#[error("Channel error: {context}")]
ChannelError { context: String },
#[error("ID error: {0:?}")]
IdGeneration(#[from] ferroid::Error),
#[error("Request cancelled by client")]
RequestCancelled,
#[error("Invalid request: {reason}")]
InvalidRequest { reason: String },
#[error("Service is shutting down")]
ServiceShutdown,
}
impl From<Error> for Status {
fn from(err: Error) -> Self {
match err {
Error::ChannelError { context } => {
Status::internal(format!("Channel error: {}", context))
}
Error::IdGeneration(e) => Status::internal(format!("ID generation error: {:?}", e)),
Error::RequestCancelled => Status::cancelled("Request was cancelled"),
Error::InvalidRequest { reason } => Status::invalid_argument(reason),
Error::ServiceShutdown => Status::unavailable("Service is shutting down"),
}
}
}