У меня MyObjManager
, который содержит массив MyObj
(более 1500 элементов). MyObj
имеет много полей String
и целое число параметра.
Функция serialize
берет менеджера и цену для сериализации массива с новой ценой.
Что-то вроде this:
use serde::{Serialize};
use serde_json;
#[derive(Serialize, Clone)]
pub struct MyObj {
id: String,
name: String,
price: Option<u32>
}
pub struct MyObjManager {
my_objs: Vec<MyObj>
}
fn get (manager: &MyObjManager, price: u32) -> Vec<MyObj> {
manager.my_objs.iter()
.map(|my_obj| {
MyObj {
price: Some(price),
..my_obj.clone() // string allocation
}
})
.collect()
}
pub fn serialize (manager: &MyObjManager, price: u32) -> String {
let my_objs = get(manager, price);
serde_json::to_string(&my_objs).unwrap()
}
В этой реализации каждый вызов serialize
выделяет много строк. Можно этого избежать?
NB: массив MyObj
можно считать stati c и не изменяется во времени