Pas özelliği tatmin edilmedi
Paslanma konusunda yeniyim ve stackoverflow'da arama yapmayı ve serde belgelerini okumayı denedim https://docs.serde.rs/serde/trait.Serialize.html ve https://serde.rs/impl-serialize.htmlama biraz kayboldum.
Tera'yı html oluşturmak için kullanmak istiyorum ve geçirdiğim yapının serde::ser::Serialize
uygulanmış özelliği yok ve uygulamaya çalıştım ancak pek doğru görünmüyor.
Cargo.toml bağımlılıkları
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);
}
derleyici diyor ki:
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
Açıkça bir şeyi kaçırıyorum ... Biri lütfen yardım edebilir mi?
Yanıtlar
Uyguladığınız özellik ve hatanın atıfta bulunduğu özellik aynı değildir, çünkü bunlar iki farklı serde sürümüne atıfta bulunurlar.
[[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
, 1.0.*
serde sürümünü kullanmıyor , ancak 0.9.*
.
Cargo.toml'nizde daha yeni bir tera veya uyumlu bir serde sürümü kullanabilirsiniz:
[dependencies]
serde = "0.9.15"
serde_derive = "0.9.15"