timesheetlib/enums/
entry_status.rs
use std::fmt;
use std::fmt::Formatter;
use std::str;
use serde::Deserialize;
use serde::Serialize;
#[cfg(feature = "diesel")]
use {
diesel::{deserialize, not_none, serialize},
diesel::{AsExpression, FromSqlRow},
diesel::backend::Backend,
diesel::deserialize::FromSql,
diesel::pg::Pg,
diesel::serialize::{IsNull, Output, ToSql},
diesel::types::Varchar,
std::io::Write,
};
#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
#[cfg_attr(
feature = "diesel",
derive(AsExpression, FromSqlRow),
sql_type = "Varchar"
)]
pub enum EntryStatus {
Draft,
Approved,
Rejected,
Submitted,
Canceled,
Payed,
Review,
Undefined,
}
impl fmt::Display for EntryStatus {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
write!(f, "{:?}", self)
}
}
impl Default for EntryStatus {
fn default() -> Self {
EntryStatus::Undefined
}
}
#[cfg(feature = "diesel")]
impl ToSql<Varchar, Pg> for EntryStatus {
fn to_sql<W: Write>(&self, out: &mut Output<W, Pg>) -> serialize::Result {
match *self {
EntryStatus::Draft => out.write_all(b"Draft")?,
EntryStatus::Approved => out.write_all(b"Approved")?,
EntryStatus::Rejected => out.write_all(b"Rejected")?,
EntryStatus::Submitted => out.write_all(b"Submitted")?,
EntryStatus::Canceled => out.write_all(b"Canceled")?,
EntryStatus::Payed => out.write_all(b"Payed")?,
EntryStatus::Review => out.write_all(b"Review")?,
EntryStatus::Undefined => out.write_all(b"Undefined")?,
}
Ok(IsNull::No)
}
}
#[cfg(feature = "diesel")]
impl FromSql<Varchar, Pg> for EntryStatus {
fn from_sql(bytes: Option<&<Pg as Backend>::RawValue>) -> deserialize::Result<Self> {
match not_none!(bytes) {
b"Draft" => Ok(EntryStatus::Draft),
b"Approved" => Ok(EntryStatus::Approved),
b"Rejected" => Ok(EntryStatus::Rejected),
b"Submitted" => Ok(EntryStatus::Submitted),
b"Canceled" => Ok(EntryStatus::Canceled),
b"Payed" => Ok(EntryStatus::Payed),
b"Review" => Ok(EntryStatus::Review),
b"Undefined" => Ok(EntryStatus::Undefined),
_ => Err("Unrecognized enum variant".into()),
}
}
}