Add function to deserialize BTreeMap with values of numbers and strings to integers
This commit is contained in:
parent
0ac2f401f8
commit
51573238a9
@ -5,7 +5,10 @@ use serde::{
|
|||||||
de::{Error, IntoDeserializer},
|
de::{Error, IntoDeserializer},
|
||||||
Deserialize,
|
Deserialize,
|
||||||
};
|
};
|
||||||
use std::convert::{TryFrom, TryInto};
|
use std::{
|
||||||
|
collections::BTreeMap,
|
||||||
|
convert::{TryFrom, TryInto},
|
||||||
|
};
|
||||||
|
|
||||||
pub mod can_be_empty;
|
pub mod can_be_empty;
|
||||||
mod canonical_json;
|
mod canonical_json;
|
||||||
@ -100,3 +103,19 @@ where
|
|||||||
{
|
{
|
||||||
IntOrString::deserialize(de)?.try_into().map_err(D::Error::custom)
|
IntOrString::deserialize(de)?.try_into().map_err(D::Error::custom)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Take a BTreeMap with values of either an integer number or a string and deserialize
|
||||||
|
/// those to integer numbers.
|
||||||
|
///
|
||||||
|
/// To be used like this:
|
||||||
|
/// `#[serde(deserialize_with = "btreemap_int_or_string_to_int_values")]`
|
||||||
|
pub fn btreemap_int_or_string_to_int_values<'de, D, T>(de: D) -> Result<BTreeMap<T, Int>, D::Error>
|
||||||
|
where
|
||||||
|
D: serde::Deserializer<'de>,
|
||||||
|
T: serde::Deserialize<'de> + Ord,
|
||||||
|
{
|
||||||
|
BTreeMap::<T, IntOrString>::deserialize(de)?
|
||||||
|
.into_iter()
|
||||||
|
.map(|(k, v)| v.try_into().map(|n| (k, n)).map_err(D::Error::custom))
|
||||||
|
.collect()
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user