pub fn deserialize_opt_quantity<'de, D, T>(
deserializer: D,
) -> Result<Option<T>, <D as Deserializer<'de>>::Error>where
D: Deserializer<'de>,
T: DeserializeOwned + TryFrom<DynQuantity<Complex<f64>>>,
<T as TryFrom<DynQuantity<Complex<f64>>>>::Error: Display,Expand description
Like deserialize_quantity, but deserializes into an Option<T>
instead of a T implementing TryFrom<DynQuantity>.
ยงExamples
use serde::{Deserialize};
use uom::si::{f64::Length, length::meter};
use dyn_quantity::deserialize_opt_quantity;
use indoc::indoc;
#[derive(Deserialize, Debug)]
struct OptLengthWrapper {
#[serde(deserialize_with = "deserialize_opt_quantity")]
opt_length: Option<Length>,
}
let ser = indoc! {"
---
opt_length: 1200 mm
"};
let wrapper: OptLengthWrapper = serde_yaml::from_str(&ser).unwrap();
assert_eq!(wrapper.opt_length.unwrap().get::<meter>(), 1.2);
let ser = indoc! {"
---
opt_length:
"};
let wrapper: OptLengthWrapper = serde_yaml::from_str(&ser).unwrap();
assert!(wrapper.opt_length.is_none());