रस्ट लक्षण संतुष्ट नहीं है

Aug 17 2020

मैं जंग के लिए नया हूँ और स्टैकओवरफ़्लो में खोज करने के साथ-साथ सर्ड डॉक्यूमेंटेशन पढ़ने की कोशिश की https://docs.serde.rs/serde/trait.Serialize.html तथा https://serde.rs/impl-serialize.html, लेकिन मैं थोड़ा खो गया था।

मैं html उत्पन्न करने के लिए Tera का उपयोग करना चाहूंगा और जो संरचना मैं इसे पारित कर रहा हूं उसमें विशेषता serde::ser::Serializeलागू नहीं है और मैंने इसे लागू करने का प्रयास किया है लेकिन यह बिल्कुल सही नहीं लगता है।

कार्गो। निर्भरताएँ

serde = "1.0.115"
serde_derive = "1.0.115"
serde-xml-rs = "0.4.0"
tera = "0.7.2"

मुख्य

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

मुझे स्पष्ट रूप से कुछ याद आ रहा है ... क्या कोई कृपया मदद कर सकता है?

जवाब

6 yolenoyer Aug 17 2020 at 06:58

आपके द्वारा लागू किया गया गुण और त्रुटि का उल्लेख करने वाले गुण समान नहीं हैं, क्योंकि वे दो अलग-अलग संस्करणों के सर्ड को संदर्भित करते हैं।

[[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.*का उपयोग नहीं कर रहा है , लेकिन 0.9.*

आप टेरा के अधिक हाल के उपयोग कर सकते हैं, या अपने Cargo.toml में एक संगत सर्ड संस्करण का उपयोग कर सकते हैं:

[dependencies]
serde = "0.9.15"
serde_derive = "0.9.15"