#http-request #serde #serialization #http-response #request-response #deserialize #url

http-serde-ext

为http crate中的类型Request、Response、Uri、StatusCode、HeaderMap、Method提供serde支持,支持Option或其他集合中的类型

12个版本 (3个稳定版)

1.0.2 2024年2月19日
1.0.1 2024年2月11日
1.0.0 2023年11月26日
0.1.8 2023年11月9日
0.1.6 2023年10月27日

#237编码

Download history 125/week @ 2024-04-22 153/week @ 2024-04-29 158/week @ 2024-05-06 246/week @ 2024-05-13 227/week @ 2024-05-20 76/week @ 2024-05-27 148/week @ 2024-06-03 113/week @ 2024-06-10 197/week @ 2024-06-17 124/week @ 2024-06-24 185/week @ 2024-07-01 83/week @ 2024-07-08 145/week @ 2024-07-15 89/week @ 2024-07-22 245/week @ 2024-07-29 152/week @ 2024-08-05

每月下载量631次
用于 5 个crate (3个直接使用)

MIT 许可证

59KB
1K SLoC

serde扩展httpcrate类型

允许从http序列化和反序列化以下类型

允许将以下类型的上述类型包装在以下 std 容器类型中进行序列化和反序列化

  • Option
  • ResultOk 位置
  • Vec
  • VecDeque
  • LinkedList
  • HashMap 作为所有除 HeaderMapRequestResponse 之外的所有类型的 Key。作为所有类型的 Value
  • BTreeMap 仅作为 HeaderValueStatusCodeVersionKey。作为所有类型的 Value
  • HashSet 除了 HeaderMapRequestResponse 之外的所有类型
  • BTreeSet 仅用于 HeaderValueStatusCodeVersion

安装

在您的项目目录中运行以下 Cargo 命令

cargo add http-serde-ext

或者在您的 Cargo.toml 中添加以下行

http-serde-ext = "1.0.2"

用法

此库旨在与 serdederive 功能一起使用。字段应使用适当的 #[serde(with = "...")] 注解。每个模块部分的完整示例可在 文档 中找到。

use std::collections::*;

use http::*;
use serde::{Serialize, Deserialize};

#[derive(Serialize, Deserialize)]
struct MyStruct {
    #[serde(with = "http_serde_ext::response")]
    base: Response<Vec<u8>>,

    #[serde(with = "http_serde_ext::request::option", default)]
    option: Option<Request<String>>,

    #[serde(with = "http_serde_ext::method::vec")]
    vec: Vec<Method>,

    #[serde(with = "http_serde_ext::uri::vec_deque")]
    vec_deque: VecDeque<Uri>,

    #[serde(with = "http_serde_ext::header_map::linked_list")]
    linked_list: LinkedList<HeaderMap>,

    #[serde(with = "http_serde_ext::header_map_generic::hash_map")]
    hash_map: HashMap<String, HeaderMap<String>>,

    #[serde(with = "http_serde_ext::status_code::btree_map_key")]
    btree_map: BTreeMap<StatusCode, i32>,

    #[serde(with = "http_serde_ext::authority::hash_set")]
    hash_set: HashSet<uri::Authority>,
}

此库还可以在给定 De/Serializer 的情况下手动 De/Serialize 类型。例如,当使用 serde_json

let uri = http::Uri::default();
let serialized = http_serde_ext::uri::serialize(&uri, serde_json::value::Serializer).unwrap();
let deserialized = http_serde_ext::uri::deserialize(serialized).unwrap();
assert_eq!(uri, deserialized);

let mut responses: Vec<http::Response<()>> = vec![http::Response::default()];
let serialized =
    http_serde_ext::response::vec::serialize(&responses, serde_json::value::Serializer)
        .unwrap();
let mut deserialized: Vec<http::Response<()>> =
    http_serde_ext::response::vec::deserialize(serialized).unwrap();

let original = responses.remove(0).into_parts();
let deserialized = deserialized.remove(0).into_parts();

assert_eq!(original.0.status, deserialized.0.status);
assert_eq!(original.0.version, deserialized.0.version);
assert_eq!(original.0.headers, deserialized.0.headers);
assert_eq!(original.1, deserialized.1);

致谢

此软件包受到 Kornel's http-serde 的极大启发。

依赖关系

~1–1.6MB
~32K SLoC