Can I do only serialization from the shelf_life: Limit
field
#[derive(Debug)]
pub enum Limit {
HOURS(i64),
DAYS(i64),
WEEKS(i64),
MONTHS(i64),
YEARS(i64),
NOT_LIMITED,
}
into 2 fields shelfLife: i64
and shelfLifeType: String
, which will be flattened against the struct.
At the moment I'm using:
...
#[serde(
rename(deserialize(deserialize = “shelfLifeInDays”, serialize = “shelfLife”),
deserialize_with = “deserialize_shelf_life”,
serialize_with = “serialize_shelf_life”,
)]
pub shelf_life: Limit,
...
fn serialize_shelf_life<S>(shelf: &Limit, s: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
let mut map = s.serialize_map(Some(2)).unwrap();
let (type_, value) = match shelf {
HOURS(v) => (“HOURS”, v),
DAYS(v) => (“DAYS”, v),
WEEKS(v) => (“WEEKS”, v),
MONTHS(v) => (“MONTHS”, v),
YEARS(v) => (“YEARS”, v),
NOT_LIMITED => (“NOT_LIMITED”, &i64::MAX),
};
map.serialize_entry(
“shelfLife”,
value
).unwrap();
map.serialize_entry(
“shelfLifeType”,
type_
).unwrap();
map.end()
}
which, creates the structure:
“shelfLife”: {
“shelfLife”: 0,
“shelfLifeType": ”DAYS”
}
and required:
...
“shelfLife”: 0,
“shelfLifeType": ”DAYS”
...