如何解决锈质不满意
我不熟悉锈,尝试在stackoverflow中进行搜索以及阅读Serde文档 https://docs.serde.rs/serde/trait.Serialize.html和https://serde.rs/impl-serialize.html,但我有点迷茫。
我想使用Tera生成html,而我传递给它的结构没有实现特征serde::ser::Serialize
,并且我尝试实现它,但是看起来不太正确。
Cargo.toml依赖项
serde = "1.0.115"
serde_derive = "1.0.115"
serde-xml-rs = "0.4.0"
tera = "0.7.2"
main.rs
extern crate tera;
#[macro_use]
extern crate serde_derive;
extern crate serde;
use tera::Context;
use serde::ser::{Serialize,SerializeStruct,Serializer};
#[derive(Serialize,Debug)]
struct Person {
firstname: String,lastname: String,age: i32,}
#[derive(Debug)]
struct Attendees {
people: Vec<Person>,updatedOn: String,updatedBy: String,}
impl Serialize for Attendees {
fn serialize<S>(&self,serializer: S) -> Result<S::Ok,S::Error>
where
S: Serializer,{
let mut s = serializer.serialize_struct("Person",3)?;
s.serialize_field("people",&self.people)?;
s.serialize_field("updatedOn",&self.updatedOn)?;
s.serialize_field("updatedBy",&self.updatedBy)?;
s.end()
}
}
fn main() {
let mut context = Context::new();
let mut peeps: Vec<Person> = Vec::new();
let mut attendees = Attendees {
people: peeps,updatedOn: String::from("today"),updatedBy: String::from("someone"),};
context.add("attendees",&attendees);
}
编译器说:
mytest % cargo run
Compiling mytest v0.1.0 (/home/mike/mytest)
error[E0277]: the trait bound `Attendees: serde::ser::Serialize` is not satisfied
--> src/main.rs:44:29
|
44 | context.add("attendees",&attendees);
| ^^^^^^^^^^ the trait `serde::ser::Serialize` is not implemented for `Attendees`
error: aborting due to previous error
我显然缺少了一些东西……有人可以帮忙吗?
解决方法
您实现的特征和错误所引用的特征不同,因为它们所引用的是Serde的两个不同版本。
[[package]]
name = "tera"
version = "0.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c37e2aaa53871f9c3722a20f8951fea0afd366955e11542a58feb71997c6d769"
dependencies = [
"chrono","error-chain","glob","humansize","lazy_static 0.2.11","pest","regex","serde 0.9.15","serde_json","slug","url",]
Tera 0.7.2
未使用Serde的版本1.0.*
,而是0.9.*
。
您可以使用更新的Tera,或在Cargo.toml中使用兼容的Serde版本:
[dependencies]
serde = "0.9.15"
serde_derive = "0.9.15"
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。