Crates.io | skippable_map |
lib.rs | skippable_map |
version | 0.1.1 |
source | src |
created_at | 2023-12-01 11:37:38.235276 |
updated_at | 2023-12-01 12:56:50.972878 |
description | deserialize wrapper around HashMap which skips non-conforming data |
homepage | |
repository | https://github.com/tveness/skippable_map |
max_upload_size | |
id | 1054970 |
size | 9,727 |
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.
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);