pub struct MapSkipError<K, V>(/* private fields */);
Expand description
Deserialize a map, skipping keys and values which fail to deserialize.
By default serde terminates if it fails to deserialize a key or a value when deserializing a map. Sometimes a map has heterogeneous keys or values but we only care about some specific types, and it is desirable to skip entries on errors.
It is especially useful in conjunction to #[serde(flatten)]
to capture a map mixed in with
other entries which we don’t want to exhaust in the type definition.
The serialization behavior is identical to the underlying map.
The implementation supports both the HashMap
and the BTreeMap
from the standard library.
§Examples
#[serde_as]
#[derive(Deserialize, Serialize)]
struct VersionNames {
yanked: Vec<u16>,
#[serde_as(as = "MapSkipError<DisplayFromStr, _>")]
#[serde(flatten)]
names: BTreeMap<u16, String>,
}
let data = VersionNames {
yanked: vec![2, 5],
names: BTreeMap::from_iter([
(0u16, "v0".to_string()),
(1, "v1".to_string()),
(4, "v4".to_string())
]),
};
let source_json = r#"{
"0": "v0",
"1": "v1",
"4": "v4",
"yanked": [2, 5],
"last_updated": 1704085200
}"#;
let data_json = r#"{"yanked":[2,5],"0":"v0","1":"v1","4":"v4"}"#;
// Ensure serialization and deserialization produce the expected results
assert_eq!(data_json, serde_json::to_string(&data).unwrap());
assert_eq!(data, serde_json::from_str(source_json).unwrap());
Trait Implementations§
Source§impl<'de, K, V, KAs, VAs> DeserializeAs<'de, BTreeMap<K, V>> for MapSkipError<KAs, VAs>
impl<'de, K, V, KAs, VAs> DeserializeAs<'de, BTreeMap<K, V>> for MapSkipError<KAs, VAs>
Source§fn deserialize_as<D>(deserializer: D) -> Result<BTreeMap<K, V>, D::Error>where
D: Deserializer<'de>,
fn deserialize_as<D>(deserializer: D) -> Result<BTreeMap<K, V>, D::Error>where
D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer.
Source§impl<'de, K, V, KAs, VAs, S> DeserializeAs<'de, HashMap<K, V, S>> for MapSkipError<KAs, VAs>where
KAs: DeserializeAs<'de, K>,
VAs: DeserializeAs<'de, V>,
K: Eq + Hash,
S: BuildHasher + Default,
impl<'de, K, V, KAs, VAs, S> DeserializeAs<'de, HashMap<K, V, S>> for MapSkipError<KAs, VAs>where
KAs: DeserializeAs<'de, K>,
VAs: DeserializeAs<'de, V>,
K: Eq + Hash,
S: BuildHasher + Default,
Source§fn deserialize_as<D>(deserializer: D) -> Result<HashMap<K, V, S>, D::Error>where
D: Deserializer<'de>,
fn deserialize_as<D>(deserializer: D) -> Result<HashMap<K, V, S>, D::Error>where
D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer.
Source§impl<K, KAs, V, VAs> SerializeAs<BTreeMap<K, V>> for MapSkipError<KAs, VAs>where
KAs: SerializeAs<K>,
VAs: SerializeAs<V>,
impl<K, KAs, V, VAs> SerializeAs<BTreeMap<K, V>> for MapSkipError<KAs, VAs>where
KAs: SerializeAs<K>,
VAs: SerializeAs<V>,
Source§fn serialize_as<S>(
value: &BTreeMap<K, V>,
serializer: S,
) -> Result<S::Ok, S::Error>where
S: Serializer,
fn serialize_as<S>(
value: &BTreeMap<K, V>,
serializer: S,
) -> Result<S::Ok, S::Error>where
S: Serializer,
Serialize this value into the given Serde serializer.
Source§impl<K, KAs, V, VAs, H> SerializeAs<HashMap<K, V, H>> for MapSkipError<KAs, VAs>
impl<K, KAs, V, VAs, H> SerializeAs<HashMap<K, V, H>> for MapSkipError<KAs, VAs>
Source§fn serialize_as<S>(
value: &HashMap<K, V, H>,
serializer: S,
) -> Result<S::Ok, S::Error>where
S: Serializer,
fn serialize_as<S>(
value: &HashMap<K, V, H>,
serializer: S,
) -> Result<S::Ok, S::Error>where
S: Serializer,
Serialize this value into the given Serde serializer.
Auto Trait Implementations§
impl<K, V> Freeze for MapSkipError<K, V>
impl<K, V> RefUnwindSafe for MapSkipError<K, V>where
K: RefUnwindSafe,
V: RefUnwindSafe,
impl<K, V> Send for MapSkipError<K, V>
impl<K, V> Sync for MapSkipError<K, V>
impl<K, V> Unpin for MapSkipError<K, V>
impl<K, V> UnwindSafe for MapSkipError<K, V>where
K: UnwindSafe,
V: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more