【发布时间】:2023-01-08 18:21:41
【问题描述】:
我尝试用 rocket 制作一个 web API 来试用这个框架。我设法使用实现可序列化的特殊结构返回分页结果。
但是,我尝试构建的 API 依赖于特殊字典中的任意值。接收到的值可以是字符串、整数、布尔值或其他复杂对象。现在的问题是,我无法创建包含“any”的结构,因为 Any 不可序列化。
基本的想法是这样的:
#[derive(Debug, Serialize, Deserialize)]
pub struct Foobar<'a> {
pub id: Uuid,
pub data: HashMap<&'a str, ??????>,
}
即使使用枚举,问题仍然存在,因为有无数种变化。比方说,我使用枚举来确定字符串、布尔值、整数。当包含类型是另一种类型时,我需要该特定类型的 json 表示。基本上是另一个带有字符串的地图 - >任何。
目前的想法是使用:
#[derive(Debug, Serialize, Deserialize)]
pub struct Foobar {
pub id: Uuid,
pub data: HashMap<String, rocket::serde::json::Value>,
}
但我不知道当存在非 json 值(例如 msgpack)时 API 将如何运行。
有人用铁锈/火箭完成了这样的壮举吗?
【问题讨论】:
-
澄清一下,您是从这个“特殊字典”获取数据并从 Rocket 路线返回的,对吧?这就是为什么它同时是
Serialize和Deserialize的原因?数据是否不特定于每个操作,因此您可以具有特定类型并使Foobar<'a, T>本身通用?您从 Rocket 返回的数据格式是否始终采用 JSON 编码?我可能是错的,但我认为Value可以表达整个 serde data-model (尽管对于二进制数据等可能看起来不太好)所以使用它可能没问题。 -
确切地。我尝试了几种选择,现在最终使用了我自己的
Value变体。
标签: rust serialization serde rust-rocket