medullah_web/macros/
enum_diesel.rs1#[macro_export]
2macro_rules! impl_enum_diesel_traits {
5 ($variant_name:ident) => {
6 impl diesel::deserialize::FromSql<diesel::sql_types::Text, diesel::pg::Pg>
7 for $variant_name
8 {
9 fn from_sql(bytes: diesel::pg::PgValue) -> diesel::deserialize::Result<Self> {
10 use std::str::FromStr;
11
12 let value = <String as diesel::deserialize::FromSql<
13 diesel::sql_types::Text,
14 diesel::pg::Pg,
15 >>::from_sql(bytes)?;
16 match $variant_name::from_str(value.as_str()) {
17 Ok(variant) => Ok(variant),
18 Err(err) => Err(err.to_string().into()),
19 }
20 }
21 }
22
23 impl diesel::serialize::ToSql<diesel::sql_types::Text, diesel::pg::Pg> for $variant_name {
24 fn to_sql(
25 &self,
26 out: &mut diesel::serialize::Output<diesel::pg::Pg>,
27 ) -> diesel::serialize::Result {
28 use std::io::Write;
29
30 let value = self.to_string();
31 out.write_all(value.as_bytes())?;
32 Ok(diesel::serialize::IsNull::No)
33 }
34 }
35 };
36}