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扩展httpcrate类型
允许从http序列化和反序列化以下类型
ResponseRequestHeaderMapStatusCodeUriMethodHeaderNameHeaderValueuri::Authorityuri::Schemeuri::PathAndQueryVersion- 泛型
HeaderMap<T>其中项不是HeaderValue
允许将以下类型的上述类型包装在以下 std 容器类型中进行序列化和反序列化
OptionResult在Ok位置VecVecDequeLinkedListHashMap作为所有除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