Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Templates 具有serde反射的借用检查器问题_Templates_Types_Rust_Traits_Serde - Fatal编程技术网

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
,现在它可以正常工作了!)