programlib/enums/
student_type.rsuse serde::Deserialize;
use serde::Serialize;
use std::str;
use strum_macros::EnumString;
#[cfg(feature = "diesel")]
use {
diesel::backend::Backend,
diesel::deserialize::FromSql,
diesel::pg::Pg,
diesel::serialize::{IsNull, Output, ToSql},
diesel::types::Varchar,
diesel::{deserialize, not_none, serialize},
diesel::{AsExpression, FromSqlRow},
std::io::Write,
};
#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, EnumString)]
#[cfg_attr(feature = "diesel", derive(AsExpression, FromSqlRow))]
#[cfg_attr(feature = "diesel", sql_type = "Varchar")]
pub enum StudentType {
GeneralStudents,
StudentsWithDisabilities,
GeneralPublic,
Teachers,
Parents,
Special,
Other
}
#[cfg(feature = "diesel")]
impl ToSql<Varchar, Pg> for StudentType {
fn to_sql<W: Write>(&self, out: &mut Output<W, Pg>) -> serialize::Result {
match *self {
StudentType::GeneralStudents => out.write_all(b"GeneralStudents")?,
StudentType::StudentsWithDisabilities => out.write_all(b"StudentsWithDisabilities")?,
StudentType::GeneralPublic => out.write_all(b"GeneralPublic")?,
StudentType::Teachers => out.write_all(b"Teachers")?,
StudentType::Parents => out.write_all(b"Parents")?,
StudentType::Special => out.write_all(b"Special")?,
StudentType::Other => out.write_all(b"Other")?,
}
Ok(IsNull::No)
}
}
impl Default for StudentType {
fn default() -> Self {
StudentType::Other
}
}
#[cfg(feature = "diesel")]
impl FromSql<Varchar, Pg> for StudentType {
fn from_sql(bytes: Option<&<Pg as Backend>::RawValue>) -> deserialize::Result<Self> {
match not_none!(bytes) {
b"GeneralStudents" => Ok(StudentType::GeneralStudents),
b"StudentsWithDisabilities" => Ok(StudentType::StudentsWithDisabilities),
b"GeneralPublic" => Ok(StudentType::GeneralPublic),
b"Teachers" => Ok(StudentType::Teachers),
b"Parents" => Ok(StudentType::Parents),
b"Special" => Ok(StudentType::Special),
b"Other" => Ok(StudentType::Other),
_ => Err("Unrecognized enum variant".into()),
}
}
}