#json-parser #rustic #interface #bindings #raw #slice #jsmn

sys jsmn-rs

对 jsmn C 库的绑定和 Rustic 接口,用于 JSON 解析

2 个不稳定版本

使用旧的 Rust 2015

0.2.0 2018 年 9 月 28 日
0.1.0 2018 年 9 月 28 日

#14 in #rustic

MIT 许可证

34KB
921

jmsn-rs

jmsn-rs 包提供对名为 jsmn 的 C 库的 rustic 接口。jsmn 库是一个 JSON 解析器,正如其作者的描述,它是快速、可移植且简单的。它不进行内存分配,也不构建带有指针的节点树,而是填充一个结构体数组,并通过数组索引来表示子项。

我最喜欢这个库的地方是它的简单性——它恰好包含 2 个枚举、2 个结构和 2 个函数,总共 1 个头文件和 1 个 .c 文件。

rustic 包装包括使用 bindgen 生成原始绑定,这些绑定可在 raw 模块中找到,然后使用标准的 Rust 命名约定对这些绑定进行包装。这意味着使用切片而不是指针和长度,以及从 jsmn_parse 返回一个 Result 而不是可以表示错误代码或计数的数字。

特性

此库提供两个特性,"parent-links" 和 "strict",可以在将 jsmn-rs 添加到 Cargo.toml 作为依赖项时设置。这将为编译 jsmn 和生成 jsmn 绑定添加预处理器指令 JSMN_PARENT_LINKS 和 JSMN_STRICT。

我已经在没有 strict 设置的情况下使用此库作为快速读取配置文件的一种方式,我也看到了一些基准测试表明 parent-links 可以极大地提高性能。

待办事项

理想情况下,应该在 64 位和 32 位机器上测试,因为我不确定 C 源代码中使用的 "int" 是否会在这里引起问题。我尝试使用 isize 和 usize 来解决这个问题,但对于某些转换,可能仍然存在问题。

此外,此库的测试非常少,示例代码也很少。

依赖关系

~0–2.1MB
~43K SLoC