2019-06-21 21:03:42 +02:00
|
|
|
use diesel::result::Error as QueryError;
|
|
|
|
use rocket::http::Status;
|
|
|
|
|
|
|
|
/// Returns a Rocket status for the provided Diesel (query) error.
|
|
|
|
pub fn error_status(error: QueryError) -> Status {
|
|
|
|
dbg!(&error);
|
|
|
|
match error {
|
|
|
|
QueryError::NotFound => Status::NotFound,
|
|
|
|
_ => Status::InternalServerError,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-06-20 20:04:05 +02:00
|
|
|
macro_rules! all {
|
|
|
|
($model_name:ident, $conn:expr) => {{
|
|
|
|
use diesel::associations::HasTable;
|
|
|
|
let table = $crate::models::$model_name::table();
|
|
|
|
table.load(&$conn)
|
|
|
|
}};
|
|
|
|
}
|
|
|
|
|
|
|
|
macro_rules! get {
|
|
|
|
($model_name:ident, $primary_key:expr, $conn:expr) => {{
|
|
|
|
use diesel::associations::HasTable;
|
|
|
|
let table = $crate::models::$model_name::table();
|
|
|
|
table.find($primary_key).first(&$conn)
|
|
|
|
}};
|
|
|
|
}
|
|
|
|
|
|
|
|
macro_rules! create {
|
|
|
|
($model_name:ident, $object:expr, $conn:expr) => {{
|
|
|
|
use diesel::associations::HasTable;
|
|
|
|
let table = $crate::models::$model_name::table();
|
|
|
|
let primary_key = table.primary_key();
|
|
|
|
$conn.transaction::<_, diesel::result::Error, _>(|| {
|
|
|
|
diesel::insert_into(table).values($object).execute(&$conn)?;
|
|
|
|
table.order(primary_key.desc()).first(&$conn)
|
|
|
|
})
|
|
|
|
}};
|
|
|
|
}
|
|
|
|
|
|
|
|
macro_rules! update {
|
|
|
|
($model_name:ident, $primary_key:expr, $object:expr, $conn:expr) => {{
|
|
|
|
use diesel::associations::HasTable;
|
|
|
|
let table = $crate::models::$model_name::table();
|
|
|
|
$conn.transaction::<_, diesel::result::Error, _>(|| {
|
|
|
|
diesel::update(table.find($primary_key))
|
|
|
|
.set($object)
|
|
|
|
.execute(&$conn)?;
|
|
|
|
table.find($primary_key).first(&$conn)
|
|
|
|
})
|
|
|
|
}};
|
|
|
|
}
|
|
|
|
|
|
|
|
macro_rules! delete {
|
|
|
|
($model_name:ident, $primary_key:expr, $conn:expr) => {{
|
|
|
|
use diesel::associations::HasTable;
|
|
|
|
let table = $crate::models::$model_name::table();
|
|
|
|
let result: Result<$model_name, _> = get!($model_name, $primary_key, $conn);
|
|
|
|
match result {
|
|
|
|
Ok(_) => diesel::delete(table.find($primary_key)).execute(&$conn),
|
|
|
|
Err(e) => Err(e),
|
|
|
|
}
|
|
|
|
}};
|
|
|
|
}
|
2019-07-08 20:09:28 +02:00
|
|
|
|
|
|
|
macro_rules! destroy_all {
|
|
|
|
($model_name:ident, $conn:expr) => {{
|
|
|
|
use diesel::associations::HasTable;
|
|
|
|
use diesel::RunQueryDsl;
|
|
|
|
|
|
|
|
let table = $crate::models::$model_name::table();
|
|
|
|
diesel::delete(table).execute(&$conn)
|
|
|
|
}};
|
|
|
|
}
|