#serde-json #json #serde

no-std serde-json-core-fmt

适用于no_std程序的serde-json

1个不稳定版本

0.1.1 2021年4月10日
0.1.0 2021年4月7日

#329无标准库

MIT/Apache

70KB
2K SLoC

serde-json-core 分支而来,移除了heapless依赖并改为使用core::fmt::Formatter

用法

struct AnyStruct {}

impl core::fmt::Display for AnyStruct {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        serde_json_core_fmt::to_fmt(f, self)
    }
}

lib.rs:

serde-json 适用于 no_std 程序

此版本的 serde-json 针对运行在资源受限设备上的应用程序。

当前功能

  • 错误类型是类似于C的枚举(开销小,内存占用小)
  • 序列化和反序列化不需要内存分配
  • 整数的反序列化不通过 u64 进行;而是直接将字符串解析到所需的整数类型。这避免了在针对非64位架构时引入KB级的编译器内联函数。
  • 支持反序列化
    • bool
    • 整数
    • str(这是一个零拷贝操作。)(*)
    • Option
    • 数组
    • 元组
    • 结构体
    • 类似于C的枚举
  • 支持(仅紧凑格式)序列化
    • bool
    • 整数
    • str (**)
    • Option
    • 数组
    • 元组
    • 结构体
    • 类似于C的枚举

(*) 字符串的反序列化忽略转义序列。转义序列可能在未来通过使用不同的序列化器来实现,因为这个操作不是零拷贝。

(**) 字符串的序列化不进行转义。这还没有实现。

计划中的功能

  • (De)序列化到/从IO对象,一旦 core::io::{Read,Write} 成为现实。

非功能

这明确超出了范围

  • 涉及动态内存分配的任何内容
    • 例如动态的 Value 类型

最低支持的Rust版本 (MSRV)

此包保证在稳定版Rust 1.40.0及更高版本上编译。它 可能 也能在较老版本上编译,但这可能会在任何新的修补版本中发生变化。

依赖项

~145–415KB