避免字符串字段克隆生锈

时间:2020-05-02 22:35:09

标签: rust clone allocation serde

我有MyObjManager,它保存着MyObj的数组(超过1500个元素)。 MyObj有很多String字段和一个选项整数。

serialize函数需要一个管理器和一个价格,用于使用新价格序列化数组。

类似这样的东西:

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的数组可以被认为是静态的,并且不会随时间变化

0 个答案:

没有答案