46 lines
1.4 KiB
Rust
46 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()
|
||
|
}
|
||
|
}
|