相关疑难解决方法(0)

在 FromForm 中反序列化 JSON 时的生命周期

我无法理解这段代码的生命周期之间的关系。基本上,我有一个接收一些x-www-form-urlencoded数据的 Rocket API,只有一个键:json. 这个键直观地包含一个 JSON 值,用百分比编码,一个 struct Message<T>

(我知道这是次优的 API 设计,但这是逆向工程工作,所以我别无选择)

为了方便地用作请求保护器From<Message<T>>,我正在实现FromForm. 为此,我需要FromForm<'f>为任何Message<T>where Timplements 实现Deserialize<'de>。我将我的 impl 签名写为impl<'f, 'de, T> FromForm<'f> for Message<T> where T: Deserialize<'de>.

为了实际执行解码,我:

  1. 获取"json"表单数据的key;
  2. URL 解码值;
  3. 解析值中包含的 JSON。

尽快脱险。这样做的代码(为方便读者使用显式类型注释):

fn from_form(items: &mut FormItems<'f>, strict: bool) -> Result<Self, Self::Error> {
    // Get JSON field
    let encoded: Option<&RawStr> = items.find(|&(k, _)| k.as_str() == "json")
        .map(|(_, v)| v);
    if let …
Run Code Online (Sandbox Code Playgroud)

rust serde rust-rocket

2
推荐指数
1
解决办法
552
查看次数

标签 统计

rust ×1

rust-rocket ×1

serde ×1