Sifat karat tidak puas
Saya baru mengenal karat dan mencoba mencari di stackoverflow serta membaca dokumentasi serde https://docs.serde.rs/serde/trait.Serialize.html dan https://serde.rs/impl-serialize.html, tapi saya agak tersesat.
Saya ingin menggunakan Tera untuk menghasilkan html dan struct yang saya lewati tidak memiliki sifat yang serde::ser::Serialize
diterapkan dan saya mencoba menerapkannya tetapi tampaknya kurang tepat.
Dependensi 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);
}
kompiler mengatakan:
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
Saya jelas kehilangan sesuatu ... Adakah yang bisa membantu?
Jawaban
Sifat yang Anda terapkan dan sifat yang dirujuk oleh kesalahan tidak sama, karena keduanya merujuk pada dua versi serde yang berbeda.
[[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
tidak menggunakan versi 1.0.*
serde, tapi 0.9.*
.
Anda dapat menggunakan tera yang lebih baru, atau menggunakan versi serde yang kompatibel di Cargo.toml Anda:
[dependencies]
serde = "0.9.15"
serde_derive = "0.9.15"