serde_with

Struct MapSkipError

Source
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>
where KAs: DeserializeAs<'de, K>, VAs: DeserializeAs<'de, V>, K: Ord,

Source§

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,

Source§

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>,

Source§

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>
where KAs: SerializeAs<K>, VAs: SerializeAs<V>, H: ?Sized + Sized,

Source§

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>

§

impl<K, V> Send for MapSkipError<K, V>
where K: Send, V: Send,

§

impl<K, V> Sync for MapSkipError<K, V>
where K: Sync, V: Sync,

§

impl<K, V> Unpin for MapSkipError<K, V>
where K: Unpin, V: Unpin,

§

impl<K, V> UnwindSafe for MapSkipError<K, V>
where K: UnwindSafe, V: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.