gpt4 book ai didi

rust - 无法在已实现的方法中序列化结构,因为 "the trait ` serde::Serialize` 未针对 `Self` 实现“

转载 作者:行者123 更新时间:2023-12-03 11:36:09 25 4
gpt4 key购买 nike

extern crate serde;
extern crate serde_json;

#[macro_use]
extern crate serde_derive;

#[derive(Serialize)]
pub struct MyStruct<'a> {
pub field1: &'a str,
pub field2: &'a str,
}

pub trait MyTrait {
fn payload_to_json(&self) -> String {
serde_json::to_string(&self)
}
fn do_the_thing(&self) {
println!(payload_to_json(&self));
}
}

impl MyTrait for MyStruct<'_> {}

fn main() {
let n = MyStruct {
field1: "foo"
field2: "bar"
}

n.do_the_thing();
}
// What I'm hoping for: { "field1": "foo", "field2": "bar" }
这给了我以下错误:
error[E0277]: the trait bound `Self: Serialize` is not satisfied
--> src/main.rs:10:31
|
10 | serde_json::to_string(&self)
| ^^^^^ the trait `Serialize` is not implemented for `Self`
我是 Rust 的新手,所以可能会遗漏一些简单的东西;唯一实现 MyTrait 的结构确实有 Serialize已实现(除非我误解了 derived() 的作用),所以我认为编译器没有被告知 .. 某处。有人可以帮忙吗?

最佳答案

将你的特质绑定(bind)到 Serialize :

pub trait MyTrait: Serialize {
fn payload_to_json(&self) -> String {
serde_json::to_string(&self).expect("A valid json")
}
fn do_the_thing(&self) {
println!("{}", self.payload_to_json());
}
}

Playground

关于rust - 无法在已实现的方法中序列化结构,因为 "the trait ` serde::Serialize` 未针对 `Self` 实现“,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66562856/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com