2 releases
0.1.1 | Dec 1, 2023 |
---|---|
0.1.0 | Dec 1, 2023 |
#9 in #mixed
9KB
75 lines
skippable_map
This crate provides a wrapper around HashMap
with a custom implementation of
Deserialize
which skips any field which does not conform to the structure of the HashMap
,
rather than throwing an error.
This liberal approach to deserializing data is helpful if attempting to extract a subset of information being passed in. For example a JSON blob with a mixed structure which cannot be controlled, but a specific set of entries is of interest.
Example
use serde_json;
use skippable_map::SkippableMap;
use std::collections::HashMap;
let json = r#"{ "string": "b", "number": 1, "other_number": 2, "negative_number": -44}"#;
// SkippableMap<String, u64> will skip the (String, String) entry, and the negative number
let just_numbers: SkippableMap<String, u64> = serde_json::from_str(json).unwrap();
let hm = HashMap::from([
(String::from("number"), 1_u64),
(String::from("other_number"), 2_u64),
]);
assert_eq!(just_numbers.as_ref(), &hm);
assert_eq!(just_numbers.0, hm);
// Consumes just_numbers to produce inner HashMap
assert_eq!(just_numbers.inner(), hm);
Dependencies
~0.3–0.9MB
~20K SLoC