3个不稳定版本
0.2.1 | 2023年8月14日 |
---|---|
0.2.0 | 2023年7月12日 |
0.1.0 | 2023年7月12日 |
#1676 in 编码
每月 21次下载
48KB
776 行
fog-human-json: 可读性雾-pack值
这个crate提供在雾-pack和JSON之间来回转换的功能,使用户能够轻松地查看格式化的雾-pack值并用现有的JSON工具进行编辑。对于像雾-pack这样的二进制数据格式,常见的抱怨是读取它们很痛苦,而通过JSON降低这种痛苦正是这个crate的目的。
这不是将常规JSON转换为雾-pack数据的crate。它使用一些特殊的字符串前缀来在JSON中编码雾-pack类型,这可能会干扰任意的JSON到雾的转换。
那么,这实际上对转换做了什么?好吧,它将每个雾-pack类型直接转换为相应的JSON类型,或者将其特别编码为以$fog-
开头的字符串。例如,32位浮点值可以特别编码为$fog-F32: 1.23
。类型列表如下:
- Str: 一个常规字符串。这只是添加了一个前缀,这样以
$fog-
开头的雾-pack字符串就不会被解析器捕获。 - Bin: 使用"标准"编码将二进制数据编码为Base64(使用
+/
符号,不使用填充,解析时接受填充)。 - F32Hex / F64Hex: 将二进制32/64位IEEE浮点值以大端十六进制编码。在将雾转换为JSON的过程中,仅当写入NaN或无穷大时才应执行此操作。
- F32 / F64 / Int: 打印标准JSON数字,但包括类型信息。这是通过告诉转换器专门执行此操作,用户添加类型信息,或者转换器对任何F32值(因为
serde_json
总是使用F64进行浮点数)执行的。 - Time: 将时间编码为RFC 3339格式的字符串。
- Hash / Identity / StreamId / LockId: 将相应的原始值编码为base58字符串(采用比特币base58样式)。
- DataLockbox / IdentityLockbox / StreamLockbox / LockLockbox: 将相应的lockbox编码为Base64数据,就像"Bin"类型一样。
这涵盖了雾包值和JSON值之间的转换,但不包括文档和条目。它们将被转换为具有以下键值对的JSON对象:
- 文档
- “schema”:如果存在,则具有架构的
$fog-Hash:HASH
。 - “signer”:如果存在,则具有签名人身份的
$fog-Identity:IDENTITY
。 - “compression”:如果不存在,则使用默认压缩。如果存在且为null,则不使用压缩。如果设置为0-255之间的数字,则使用该数字作为压缩级别。
- “data”:文档内容。必须存在。
- “schema”:如果存在,则具有架构的
- 条目
- “parent”:父文档的哈希值。
- “key”:条目的字符串键。
- “signer”:如果存在,则包含签名人身份。
- “compression”:如果不存在,则使用默认压缩。如果存在且为null,则不使用压缩。如果设置为0-255之间的数字,则使用该数字作为压缩级别。
- “data”:条目内容。必须存在。
当从JSON转换为文档或条目时,如果指定了“signer”,它将尝试从提供的保险库中拉取匹配的IdentityKey并使用它来重现签名。如果无法做到,则转换将失败。
依赖项
~15MB
~291K SLoC