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>,
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>,
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,
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,
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
Layout§
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...)
attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.
Size: 0 bytes