【发布时间】:2021-01-03 22:47:38
【问题描述】:
我正在尝试使用serde-reflection 创建一个解释结构结构的 JSON 结构,以便以 JavaScript 和 ArrayBuffer 的形式传输和接收结构,然后将其反序列化为浏览器中的 JavaScript 对象。
我想要一种方法来“注册”我感兴趣的结构,然后跟踪所有注册的类型,以便可以从 Web 服务器返回它们。
extern crate serde_json;
use serde_json::json;
use serde_reflection::{Samples, Tracer, TracerConfig};
pub struct MessageRegistry {
tracer: Tracer,
samples: Samples
}
impl MessageRegistry {
pub fn new() -> MessageRegistry {
MessageRegistry {
tracer: Tracer::new(TracerConfig::default()),
samples: Samples::new()
}
}
pub fn add_type<T>(&mut self) {
self.tracer.trace_type::<T>(&self.samples).unwrap();
//^^^^^^^^^^ the trait `serde::Deserialize<'_>` is not implemented for `T`
}
pub fn to_json_string(&mut self) -> String {
let registry = self.tracer.registry().unwrap();
serde_json::to_string(®istry).unwrap()
}
}
我坚持使用tracer.trace_type::<T>(&self.samples) 行。如果我尝试使用 pub fn add<'de, T: serde::Deserialize<'de>>(&mut self) { 来代替,我会遇到生命周期问题:
cannot infer an appropriate lifetime for borrow expression due to conflicting requirements
expected `serde::Deserialize<'_>`
found `serde::Deserialize<'de>`
【问题讨论】:
标签: templates types rust traits serde