INNER CODE UNIT · Rust
serialize_enum_or_unknown
stepancheg/rust-protobuf · protobuf-examples/customize-serde/src/lib.rs:22
fn serialize_enum_or_unknown<E: EnumFull, S: serde::Serializer>(
e: &Option<EnumOrUnknown<E>>,
s: S,
) -> Result<S::Ok, S::Error> {
if let Some(e) = e {
match e.enum_value() {
Ok(v) => s.serialize_str(v.descriptor().name()),
Err(v) => s.serialize_i32(v),
}
} else {
s.serialize_unit()
}
}
fn deserialize_enum_or_unknown<'de, E: EnumFull, D: serde::Deserializer<'de>>(
d: D,
) -> Result<Option<EnumOrUnknown<E>>, D::Error> {
struct DeserializeEnumVisitor<E: EnumFull>(PhantomData<E>);