42 lines
1.1 KiB
Rust
42 lines
1.1 KiB
Rust
use serde::ser::SerializeStruct;
|
|
use serde::{Serialize, Serializer};
|
|
|
|
pub enum DatabaseError {
|
|
InsertError,
|
|
InsertGetError,
|
|
NotFound,
|
|
}
|
|
|
|
impl DatabaseError {
|
|
fn to_code(&self) -> u32 {
|
|
match self {
|
|
DatabaseError::NotFound => 404,
|
|
_ => 500
|
|
}
|
|
}
|
|
}
|
|
|
|
impl Serialize for DatabaseError {
|
|
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
|
|
where
|
|
S: Serializer,
|
|
{
|
|
let mut s = serializer.serialize_struct("error", 3)?;
|
|
s.serialize_field("type", "database-error")?;
|
|
s.serialize_field("code", &self.to_code())?;
|
|
s.serialize_field("description", &String::from(self))?;
|
|
s.end()
|
|
}
|
|
}
|
|
|
|
impl From<&DatabaseError> for String {
|
|
fn from(err: &DatabaseError) -> Self {
|
|
match err {
|
|
DatabaseError::InsertError => String::from("error inserting into database"),
|
|
DatabaseError::InsertGetError => {
|
|
String::from("error retrieving new entry from database (your entry was saved)")
|
|
}
|
|
DatabaseError::NotFound => String::from("model was not found in database")
|
|
}
|
|
}
|
|
}
|