Diesel Enum
まれに書くときに書き方忘れる
ToSqlとFromSqlの実装忘れたらコンパイルとおらない
#[derive(
Debug,
Eq,
PartialEq,
Clone,
FromSqlRow,
AsExpression,
EnumString,
Display,
)]
#[diesel(sql_type = EnumTypeInSchema)]
pub enum EnumAB {
#[strum(serialize = "a")]
#[serde(rename = "a")]
A,
#[strum(serialize = "b")]
#[serde(rename = "b")]
B,
}
impl ToSql<EnumTypeInSchema, Mysql> for EnumAB {
fn to_sql<'b>(&'b self, out: &mut Output<'b, '_, Mysql>) -> serialize::Result {
out.write_all(self.to_string().as_bytes())?;
Ok(IsNull::No)
}
}
impl FromSql<EnumTypeInSchema, Mysql> for EnumAB {
fn from_sql(bytes: MysqlValue<'_>) -> deserialize::Result<Self> {
match bytes.as_bytes() {
b"a" => Ok(EnumAB::A),
b"b" => Ok(EnumAB::B),
_ => Err("Unrecognized enum variant".into()),
}
}
}