enum accepts numbers from json
This commit is contained in:
@@ -3,7 +3,7 @@ use diesel::deserialize::{self, FromSql, FromSqlRow};
|
||||
use diesel::pg::{Pg, PgValue};
|
||||
use diesel::serialize::{IsNull, Output, ToSql};
|
||||
use diesel::*;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use serde::{Deserialize, Deserializer, Serialize, Serializer};
|
||||
use std::io::Write;
|
||||
use diesel::expression::AsExpression;
|
||||
use crate::schema::sql_types::BatteryStatusEnum;
|
||||
@@ -24,7 +24,7 @@ pub struct Location {
|
||||
bear: Option<BigDecimal>,
|
||||
}
|
||||
|
||||
#[derive(Debug, FromSqlRow, AsExpression, Serialize, Deserialize)]
|
||||
#[derive(Debug, FromSqlRow, AsExpression)]
|
||||
#[diesel(sql_type = BatteryStatusEnum)]
|
||||
pub enum BatteryStatus {
|
||||
Unknown,
|
||||
@@ -56,3 +56,35 @@ impl FromSql<BatteryStatusEnum, Pg> for BatteryStatus {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Custom JSON representation (if you want numbers in JSON)
|
||||
impl Serialize for BatteryStatus {
|
||||
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
|
||||
where
|
||||
S: Serializer,
|
||||
{
|
||||
let code = match self {
|
||||
BatteryStatus::Unknown => 0,
|
||||
BatteryStatus::Unplugged => 1,
|
||||
BatteryStatus::Charging => 2,
|
||||
BatteryStatus::Full => 3,
|
||||
};
|
||||
serializer.serialize_u8(code)
|
||||
}
|
||||
}
|
||||
|
||||
impl<'de> Deserialize<'de> for BatteryStatus {
|
||||
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
|
||||
where
|
||||
D: Deserializer<'de>,
|
||||
{
|
||||
let v = u8::deserialize(deserializer)?;
|
||||
match v {
|
||||
0 => Ok(BatteryStatus::Unknown),
|
||||
1 => Ok(BatteryStatus::Unplugged),
|
||||
2 => Ok(BatteryStatus::Charging),
|
||||
3 => Ok(BatteryStatus::Full),
|
||||
_ => Err(serde::de::Error::custom("invalid battery status code")),
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user