Templates 具有serde反射的借用检查器问题
我试图使用Templates 具有serde反射的借用检查器问题,templates,types,rust,traits,serde,Templates,Types,Rust,Traits,Serde,我试图使用serde reflection创建一个JSON结构来解释结构,以便将结构作为JavaScript传输和接收到ArrayBuffer,然后在浏览器中将其反序列化为JavaScript对象 我想要一种方法来“注册”我感兴趣的结构,然后跟踪所有注册的类型,以便可以从web服务器返回它们 extern板条箱serde_json; 使用serde_json::json; 使用serde_反射:{Samples,Tracer,TracerConfig}; 发布结构消息注册表{ 追踪器:追踪器,
serde reflection
创建一个JSON结构来解释结构,以便将结构作为JavaScript传输和接收到ArrayBuffer
,然后在浏览器中将其反序列化为JavaScript对象
我想要一种方法来“注册”我感兴趣的结构,然后跟踪所有注册的类型,以便可以从web服务器返回它们
extern板条箱serde_json;
使用serde_json::json;
使用serde_反射:{Samples,Tracer,TracerConfig};
发布结构消息注册表{
追踪器:追踪器,
样本:样本
}
impl消息注册表{
pub fn new()->MessageRegistry{
消息注册表{
tracer:tracer::new(TracerConfig::default()),
示例:示例::新()
}
}
发布fn添加类型(&mut self){
self.tracer.trace_type:(&self.samples.unwrap();
//^^^^^^^^^^trait`serde::反序列化(&mut self){
反而使我的生存期出现问题:
由于需求冲突,无法推断借用表达式的适当生存期
应为“serde::反序列化”`
编译错误告诉您如何修复错误,只需添加一个绑定到泛型参数T
的反序列化
。由于借用来自&self。示例
那么反序列化
也必须以某种方式绑定到self
,我们可以用泛型参数'a
指定:
使用serde::de::反序列化;
使用serde_反射:{Registry,Samples,Tracer,TracerConfig};
发布结构消息注册表{
追踪者:选项,
样本:样本,
注册表:选项,
}
impl消息注册表{
pub fn new()->MessageRegistry{
消息注册表{
tracer:Some(tracer::new(TracerConfig::default()),
示例:示例::新建(),
注册处:无,
}
}
发布fn添加类型>(&'a mut self){
self.tracer.as_mut().unwrap().trace_类型::(&self.samples.unwrap());
}
pub fn to_json_string(&mut self)->string{
self.registry=self.tracer.take().unwrap().registry().ok();
serde_json::to_字符串(self.registry.as_ref().unwrap()).unwrap()
}
}
注意:
tracer.registry()
使用了跟踪器
,因此我不得不将其包装在选项中
。还添加了一个注册表
字段,该字段包装在对象中,表示所使用的跟踪器
的结果非常感谢!我只需要和一个mut self
,现在它可以正常工作了!)