5 个版本

0.5.0 2024年4月28日
0.1.3 2023年2月16日
0.1.2 2022年11月11日
0.1.1 2022年7月8日
0.1.0 2022年5月19日

#575网页编程

Download history 10025/week @ 2024-04-28 6896/week @ 2024-05-05 11699/week @ 2024-05-12 19156/week @ 2024-05-19 10239/week @ 2024-05-26 9751/week @ 2024-06-02 15986/week @ 2024-06-09 9696/week @ 2024-06-16 11147/week @ 2024-06-23 10512/week @ 2024-06-30 11175/week @ 2024-07-07 7576/week @ 2024-07-14 9004/week @ 2024-07-21 8260/week @ 2024-07-28 9624/week @ 2024-08-04 13003/week @ 2024-08-11

40,411 每月下载量
24 个 Crates 中使用 (直接使用 14 个)

MPL-2.0 许可协议

21KB
415

Base64 Url Safe Serde 包装器

帮助内联反序列化 base64 数据类型的包装器。


lib.rs:

Vec<u8> 提供包装器,以便 Serde 能够将其序列化和反序列化为 URL 安全、非填充的 Base64(根据 RFC 4648 §5)。

序列化行为

  • Base64UrlSafeData 总是序列化为 URL 安全、非填充的 Base64。

  • HumanBinaryData 只有在使用 可读格式 时才序列化为 URL 安全、非填充的 Base64。

    否则,它将序列化为类似 "bytes" 的类型(如 serde_bytes)。

    此功能是 base64urlsafe v0.1.4 中引入的。

相比之下,Serde 的默认行为是将 Vec<u8> 序列化为一系列整数。这对许多格式来说是一个问题

  • serde_cbor 将其编码为一个 array,而不是一个 bytes。对于大于 0x1F 的值,它使用 zig-zag 编码的整数,假设值的分布均匀,平均每个字节的长度约为 1.88 字节。

  • serde_json 将其编码为一个 Array<Number>,没有空格时平均每个字节的长度为 3.55 字节。

使用 Base64 编码平均每个字节的长度为 1.33 字节,并且大多数格式几乎以原样传递字符串。

反序列化行为

两种类型都支持反序列化多种格式,前提是格式是自描述的(即:[实现 deserialize_any](https://serde.rs/impl-deserialize.html))。

  • 字节类型以原样传递(v0.1.4 新增)。

    HumanBinaryData 产生非人类可读格式。[HumanBinaryData](https://docs.rs/base64urlsafedata/latest/base64urlsafedata/?search=HumanBinaryData)。

  • 整数序列以原样传递。

    Serde 的默认 Vec<u8> 序列化器为许多格式生成此内容。

  • 字符串根据 [RFC 4648 §5 (URL-safe)](https://datatracker.ietf.org/doc/html/rfc4648#section-5) 或 [RFC 4648 §4 (标准)](https://datatracker.ietf.org/doc/html/rfc4648#section-4) 进行 Base64 解码,可选填充。

    Base64UrlSafeData 为所有格式生成此内容,而 [HumanBinaryData](https://docs.rs/serde/latest/serde/trait.Serializer.html#method.is_human_readable) 为人类可读格式生成此内容。这也应该与其他许多序列化器兼容。

Base64UrlSafeData 迁移到 HumanBinaryData

Base64UrlSafeData 总是使用 Base64 编码,这对于许多二进制格式来说并不理想。因此,如果您使用二进制格式,迁移到 HumanBinaryData 是一个好主意。

但是,在将任何内容切换到 HumanBinaryData 之前,您需要确保所有使用 Base64UrlSafeData 的读取器都在 base64urlsafedata v0.1.4 或更高版本上。否则,它们将无法读取新格式中的任何数据!

一旦所有迁移完成,您就可以开始以新格式进行写入。缓慢推出更改是一个好主意,以防您发现遗漏了某些内容。

替代方案

  • serde_bytes,它仅针对非人类可读格式实现 Vec<u8> 的有效编码。[serde_bytes](https://docs.rs/serde_bytes)。

依赖项

~0.6–1.2MB
~27K SLoC