arysn/
error.rs

1use thiserror::Error;
2
3pub type Result<T> = std::result::Result<T, ArysnError>;
4
5#[derive(Error, Debug)]
6pub enum ArysnError {
7    #[error("not found!")]
8    NotFound,
9    #[error(transparent)]
10    Other(#[from] anyhow::Error),
11}
12
13impl From<tokio_postgres::error::Error> for ArysnError {
14    fn from(error: tokio_postgres::error::Error) -> Self {
15        ArysnError::Other(error.into())
16    }
17}
18
19impl From<std::io::Error> for ArysnError {
20    fn from(error: std::io::Error) -> Self {
21        ArysnError::Other(error.into())
22    }
23}
24
25pub trait Optional<T> {
26    fn optional(self) -> Result<Option<T>>;
27}
28
29impl<T> Optional<T> for Result<T> {
30    fn optional(self) -> Result<Option<T>> {
31        match self {
32            Ok(value) => Ok(Some(value)),
33            Err(ArysnError::NotFound) => Ok(None),
34            Err(e) => Err(e),
35        }
36    }
37}