所以我有一个Value来自某处的 serde,我想在Value反序列化之前添加额外的“字段”。我正在查看文档,但我不知道该怎么做。
更具体地说,假设我有一个 HashMap,我想将其值合并到 Value 中。
pub fn merge(v: &Value, fields: &HashMap<String, String>) -> Value
Run Code Online (Sandbox Code Playgroud)
您需要提取地图(在本Value::Object例中),复制它(因为您只接受&Value输入),更新它,然后将其重新包装在Value::Object例如
pub fn merge(v: &Value, fields: &HashMap<String, String>) -> Value {
match v {
Value::Object(m) => {
let mut m = m.clone();
for (k, v) in fields {
m.insert(k.clone(), Value::String(v.clone()));
}
Value::Object(m)
}
v => v.clone(),
}
}
Run Code Online (Sandbox Code Playgroud)
(发生冲突时,这将v用 's 覆盖 's 条目fields)。
请注意,merge如果它按值获取参数,那么效率可能会更高,因为它不必复制它们。
相反,它可以Object就地更新 的映射(然后返回更新后的值),并按原样返回其余部分。它还可以v通过可变引用并就地更新映射(并忽略任何非Object Value),在这种情况下它不需要返回任何内容。
| 归档时间: |
|
| 查看次数: |
4784 次 |
| 最近记录: |