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, } } 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), } }}; } 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) }}; }