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 在 编码
每月下载量631次
用于 5 个crate (3个直接使用)
59KB
1K SLoC
为serde
扩展http
crate类型
允许从http
序列化和反序列化以下类型
Response
Request
HeaderMap
StatusCode
Uri
Method
HeaderName
HeaderValue
uri::Authority
uri::Scheme
uri::PathAndQuery
Version
- 泛型
HeaderMap<T>
其中项不是HeaderValue
允许将以下类型的上述类型包装在以下 std
容器类型中进行序列化和反序列化
Option
Result
在Ok
位置Vec
VecDeque
LinkedList
HashMap
作为所有除HeaderMap
、Request
和Response
之外的所有类型的Key
。作为所有类型的Value
。BTreeMap
仅作为HeaderValue
、StatusCode
和Version
的Key
。作为所有类型的Value
。HashSet
除了HeaderMap
、Request
和Response
之外的所有类型BTreeSet
仅用于HeaderValue
、StatusCode
和Version
安装
在您的项目目录中运行以下 Cargo 命令
cargo add http-serde-ext
或者在您的 Cargo.toml 中添加以下行
http-serde-ext = "1.0.2"
用法
此库旨在与 serde
的 derive
功能一起使用。字段应使用适当的 #[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