gpt4 book ai didi

rust - 我可以使用自己的序列化结构在 Rocket 中渲染模板吗?

转载 作者:行者123 更新时间:2023-11-29 08:05:10 26 4
gpt4 key购买 nike

我正在使用 Rocket我正在尝试创建一个 Layout 结构。我已经实现了 serde::Serialize,因为文档说静态方法 Template::render 的第二个参数接受一个实现了 Serialize 的结构>:

struct Layout {
data: String,
second: String,
}

impl Layout {
fn new(data: String, second: String) -> Layout {
Layout { data, second }
}

fn render(&self) -> Template {
Template::render("Layout", &self)
}
}

impl Serialize for Layout {
fn serialize<S>(&self, serialize: S) -> Result<S::Ok, S::Error>
where S: Serializer
{
let mut state = serializer.serialize_struct("Layout", 2);
state.serialize_field("data", &self.data)?;
state.serialize_field("second", &self.data)?;
state.end()
}
}

我得到了错误

the trait `serde::ser::Serialize` is not implemented for `layout::Layout`

我做错了什么?

最佳答案

火箭的当前版本 v0.2.6 使用 serde = "^0.9" 而不是 serde 1.0。这意味着如果您在 Cargo.toml 中说类似 serde = "1" 的内容,cargo 将下载并链接两个不同版本的 serde。这会导致出现错误消息。

此外,由于chrono开发者的错误,chrono 3.1使用serde 1.0,而chrono 3.0使用serde 0.9。但是将依赖项更新到新的主要版本应该会导致 crate 本身出现主要版本冲突(相关:What exactly is considered a breaking change to a library crate?)。这会导致许多破损。为了解决这个问题,如果你想使用那个箱子,你需要在你的 Cargo.toml 中说 chrono = "=3.0"

顺便说一句,这正是 diesel 0.12 正在做的事情,它也使用 serde 0.9。 Diesel 0.13 使用 serde 1.0,因此它可以依赖于 chrono = "^0.3.1"。所以 Rocket 可能是最后一个需要过渡到 serde 1.0 的箱子。但这应该不会再花太长时间了。然后,一切都应该恢复正常。

啊哈,没有什么能比得上早上依赖 hell 的味道了。

关于rust - 我可以使用自己的序列化结构在 Rocket 中渲染模板吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44009825/

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