45 lines
1.4 KiB
Rust
45 lines
1.4 KiB
Rust
use axum::{http::StatusCode, response::IntoResponse};
|
|
use log::error;
|
|
|
|
#[derive(Debug, thiserror::Error)]
|
|
pub enum Error {
|
|
#[error("io error: {:?}", 0)]
|
|
Io(#[from] std::io::Error),
|
|
#[error("time error: {:?}", 0)]
|
|
Time(#[from] std::time::SystemTimeError),
|
|
#[error("metadata error: {:?}", 0)]
|
|
MetadataDe(#[from] toml::de::Error),
|
|
#[error("metadata error: {:?}", 0)]
|
|
MetadataSer(#[from] toml::ser::Error),
|
|
#[error("phrase is not valid")]
|
|
PhraseInvalid,
|
|
#[error("bin could not be found")]
|
|
BinNotFound,
|
|
#[error("file exists")]
|
|
DataFileExists,
|
|
|
|
#[error("hex error: {:?}", 0)]
|
|
Hex(#[from] hex::FromHexError),
|
|
|
|
#[error("could not parse ttl")]
|
|
ParseTtl,
|
|
|
|
#[error("encryption error")]
|
|
ChaCha,
|
|
}
|
|
|
|
impl IntoResponse for Error {
|
|
fn into_response(self) -> axum::response::Response {
|
|
match self {
|
|
Self::PhraseInvalid => (StatusCode::BAD_REQUEST, "phrase is not valid"),
|
|
Self::BinNotFound => (StatusCode::NOT_FOUND, "bin does not exist"),
|
|
Self::DataFileExists => (StatusCode::CONFLICT, "bin already has data"),
|
|
Self::ParseTtl => (StatusCode::BAD_REQUEST, "invalid ttl class"),
|
|
_ => {
|
|
error!("{:?}", self);
|
|
(StatusCode::INTERNAL_SERVER_ERROR, "internal server error")
|
|
}
|
|
}
|
|
.into_response()
|
|
}
|
|
}
|