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}