65 lines
1.6 KiB
Rust
65 lines
1.6 KiB
Rust
use rocket::{http::Status, response, response::Responder, Request};
|
|
use rocket_okapi::response::OpenApiResponderInner;
|
|
use schemars::JsonSchema;
|
|
use thiserror::Error;
|
|
|
|
/// # Ordering
|
|
///
|
|
/// Ordering of data in an array, ascending or descending
|
|
#[derive(Clone, Debug, FromFormField, JsonSchema)]
|
|
#[serde(rename_all = "snake_case")]
|
|
pub enum Ordering {
|
|
#[field(value = "desc")]
|
|
Desc,
|
|
#[field(value = "asc")]
|
|
Asc,
|
|
}
|
|
|
|
impl ToString for Ordering {
|
|
fn to_string(&self) -> String {
|
|
match self {
|
|
Self::Desc => "DESC",
|
|
Self::Asc => "ASC",
|
|
}
|
|
.into()
|
|
}
|
|
}
|
|
|
|
#[derive(Error, Debug)]
|
|
pub enum PartyError {
|
|
#[error("user `{0}` does not exist")]
|
|
UserNotFound(i64),
|
|
#[error("unknown error: {0}")]
|
|
Unknown(String),
|
|
#[error("invalid parameter: {0}")]
|
|
InvalidParameter(String),
|
|
#[error("uuid error {source:?}")]
|
|
UuidError {
|
|
#[from]
|
|
source: uuid::Error,
|
|
},
|
|
#[error("sqlx error {source:?}")]
|
|
SqlxError {
|
|
#[from]
|
|
source: sqlx::Error,
|
|
},
|
|
}
|
|
|
|
impl OpenApiResponderInner for PartyError {
|
|
fn responses(
|
|
_gen: &mut rocket_okapi::gen::OpenApiGenerator,
|
|
) -> rocket_okapi::Result<okapi::openapi3::Responses> {
|
|
Ok(okapi::openapi3::Responses::default())
|
|
}
|
|
}
|
|
|
|
impl<'r, 'o: 'r> Responder<'r, 'o> for PartyError {
|
|
fn respond_to(self, req: &'r Request<'_>) -> response::Result<'o> {
|
|
match self {
|
|
Self::UserNotFound(_) => Status::NotFound,
|
|
_ => Status::InternalServerError,
|
|
}
|
|
.respond_to(req)
|
|
}
|
|
}
|