I have two structs.
DishVariation
#[derive(Deserialize, Serialize, Clone)]
pub struct DishVariation {
id: u64,
variation: String,
price: f32,
}
DishVariationJson
#[derive(Deserialize)]
pub struct DishVariationJson {
pub variation_name: String,
pub variation_price: f32,
}
The latter is used to easily receive input over HTTP. DishVariation
is the full complicated struct with implementations.
When I receive a vector of DishVariationJson
I need to convert it to a vector of DishVariation
. So I can actually use the received data.
This code works:
let dish_variations: std::vec::Vec<DishVariation> = std::vec::Vec::new();
for dish_variation_json in data.dish_variations {
dish_variations.push(DishVariation {
id: 0,
variation: dish_variation_json.variation_name,
price: dish_variation_json.variation_price,
});
}
(data.dish_variations
has type std::vec::Vec<DishVariationJson
).
But I was wondering if there is a more elegant approach. I tried to use iter
and map
to convert to the correct struct-type on-the-go but I am stuck.
let dish_variations : std::vec::Vec<DishVariation> = data.dish_variations.iter().map(|x| {
})
I should be able to do something like this:
let dish_variations: std::vec::Vec<DishVariation> = data.dish_variations.iter().map(|x| {
push(DishVariation {
id: 0,
variation: x.variation_name,
price: x.variation_price,
})
});
Is this possible?