#fog-pack #数据 #JSON格式 #可读性 #JSON #转换JSON #文档

fog-human-json

通过JSON实现可读性的雾-pack数据

3个不稳定版本

0.2.1 2023年8月14日
0.2.0 2023年7月12日
0.1.0 2023年7月12日

#1676 in 编码

每月 21次下载

MIT/Apache

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”:文档内容。必须存在。
  • 条目
    • “parent”:父文档的哈希值。
    • “key”:条目的字符串键。
    • “signer”:如果存在,则包含签名人身份。
    • “compression”:如果不存在,则使用默认压缩。如果存在且为null,则不使用压缩。如果设置为0-255之间的数字,则使用该数字作为压缩级别。
    • “data”:条目内容。必须存在。

当从JSON转换为文档或条目时,如果指定了“signer”,它将尝试从提供的保险库中拉取匹配的IdentityKey并使用它来重现签名。如果无法做到,则转换将失败。

依赖项

~15MB
~291K SLoC