pub fn deserialize_vec_of_quantities<'de, D, T>(
deserializer: D,
) -> Result<Vec<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
Deserializes a vector of T which implements TryFrom<DynQuantity> from:
- A vector representation of
DynQuantityor - A string representing a vector of numbers with a unit behind it.
ยงExamples:
use indoc::indoc;
use serde::{Deserialize};
use uom::si::{f64::Length, length::meter};
use dyn_quantity::deserialize_vec_of_quantities;
#[derive(Deserialize, Debug)]
struct VecWrapper {
#[serde(deserialize_with = "deserialize_vec_of_quantities")]
vec: Vec<Length>,
}
// Variant 1: Vector representation of `DynQuantity`
let ser = indoc! {"
---
vec: [1 m, 2 mm, 3 km]
"};
let wrapper: VecWrapper = serde_yaml::from_str(&ser).unwrap();
assert_eq!(wrapper.vec[0].get::<meter>(), 1.0);
assert_eq!(wrapper.vec[1].get::<meter>(), 0.002);
assert_eq!(wrapper.vec[2].get::<meter>(), 3000.0);
// Variant 2: Vector of numbers with unit at the end
let ser = indoc! {"
---
vec: '[1, 2e-3, 3e3] m'
"};
let wrapper: VecWrapper = serde_yaml::from_str(&ser).unwrap();
assert_eq!(wrapper.vec[0].get::<meter>(), 1.0);
assert_eq!(wrapper.vec[1].get::<meter>(), 0.002);
assert_eq!(wrapper.vec[2].get::<meter>(), 3000.0);