use serde::de;
use serde::{Deserialize, Deserializer};
use std::str::FromStr;
pub(crate) fn from_str<'de, D, T>(d: D) -> Result<T, D::Error>
where
D: Deserializer<'de>,
T: FromStr,
{
let s = String::deserialize(d)?;
T::from_str(&s).map_err(|_| de::Error::custom("Failed to parse string field"))
}
#[cfg(test)]
mod from_str_tests {
use serde_json::value::Value;
#[test]
fn it_parses_a_string_to_u64() {
let value = Value::String("123".to_string());
assert_eq!(super::from_str::<Value, u64>(value).unwrap(), 123u64);
}
#[test]
fn it_returns_err_if_invalid() {
let value = Value::String("123abc".to_string());
assert!(super::from_str::<Value, u64>(value).is_err());
}
}