[−][src]Module either::serde_untagged_optional
Untagged serialization/deserialization support for Option<Either<L, R>>.
Either
uses default, externally-tagged representation.
However, sometimes it is useful to support several alternative types.
For example, we may have a field which is generally Map<String, i32>
but in typical cases Vec
#[macro_use] extern crate serde; // or `use serde::{Serialize, Deserialize};` in newer rust versions. use either::Either; use std::collections::HashMap; #[derive(Serialize, Deserialize, Debug)] #[serde(transparent)] struct IntOrString { #[serde(with = "either::serde_untagged_optional")] inner: Option<Either<Vec<String>, HashMap<String, i32>>> }; // serialization let data = IntOrString { inner: Some(Either::Left(vec!["Hello".to_string()])) }; // notice: no tags are emitted. assert_eq!(serde_json::to_string(&data)?, r#"["Hello"]"#); // deserialization let data: IntOrString = serde_json::from_str( r#"{"a": 0, "b": 14}"# )?; println!("found {:?}", data);
Functions
deserialize | |
serialize |