#serde #byte #byte-slice #no-std #no-alloc #derive-deserialize

无 std serde_bytes

针对 Serde 优化处理 &[u8]Vec<u8>

23 个版本

0.11.15 2024年6月25日
0.11.14 2024年1月2日
0.11.13 2023年12月27日
0.11.12 2023年7月15日
0.10.1 2017年6月30日

#13 in 编码

Download history 427929/week @ 2024-05-04 478672/week @ 2024-05-11 492824/week @ 2024-05-18 516338/week @ 2024-05-25 619824/week @ 2024-06-01 582628/week @ 2024-06-08 558265/week @ 2024-06-15 627210/week @ 2024-06-22 570639/week @ 2024-06-29 590326/week @ 2024-07-06 598403/week @ 2024-07-13 619869/week @ 2024-07-20 605424/week @ 2024-07-27 588033/week @ 2024-08-03 621937/week @ 2024-08-10 516094/week @ 2024-08-17

每月下载 2,438,364
用于 4,862 包 (直接使用 832 个)

MIT/Apache

36KB
920

serde_bytes 构建状态 最新版本

包装类型以实现针对 &[u8]Vec<u8> 的优化处理。

[dependencies]
serde_bytes = "0.11"

说明

在没有特化的情况下,Rust 会强制 Serde 将 &[u8] 看作任何其他切片,将 Vec<u8> 看作任何其他向量。实际上,这个特定的切片和向量在许多格式中通常可以以更有效、更紧凑的表示进行序列化和反序列化。

当与这种格式一起工作时,您可以通过将 serde_bytes::Bytes 包装在 &[u8] 中,通过将 serde_bytes::ByteBuf 包装在 Vec<u8> 中来选择专门处理 &[u8]

此外,这个包支持Serde的with属性,以便在不需要包装类型的情况下,高效地处理struct中的&[u8]Vec<u8>

示例

use serde::{Deserialize, Serialize};

#[derive(Deserialize, Serialize)]
struct Efficient<'a> {
    #[serde(with = "serde_bytes")]
    bytes: &'a [u8],

    #[serde(with = "serde_bytes")]
    byte_buf: Vec<u8>,
}

许可证

根据您的选择,该许可证受Apache License, Version 2.0MIT许可证的约束。
除非您明确声明,否则您根据Apache-2.0许可证定义的任何贡献,都将按上述方式双重许可,而不附加任何额外条款或条件。

依赖项

~110–350KB