#serde-json #json #sorting #merge #serde #iter

serde_json_merge

递归合并、索引、迭代和排序serde_json::Value

2个版本

0.0.4 2022年9月28日
0.0.3 2022年9月22日

#954 in 编码


cargo-feature-combination…中使用

自定义许可

110KB
3K SLoC

serde_json_merge

build status test status benchmarks crates.io docs.rs

递归合并、索引、迭代和排序serde_json::Value

此库支持使用DFS和BFS遍历就地合并和排序,与大多数使用递归且可能发生栈溢出的实现不同。

[dependencies]
serde_json_merge = "0"

用法

有关用法示例,请查看示例文档

示例

cargo run --example async_fs --features async -- --path ./
cargo run --example sync_fs --features sync,rayon -- --path ./

文档

RUSTDOCFLAGS="--cfg docsrs" cargo +nightly doc --all-features

代码检查

cargo feature-combinations clippy --fail-fast --pedantic --tests --benches --examples -- -Dclippy::all -Dclippy::pedantic
cargo clippy --tests --benches --examples -- -Dclippy::all -Dclippy::pedantic

基准测试

cargo install cargo-criterion
# full benchmark suite
cargo criterion --features full

CI的基准测试报告可在此处找到。

致谢

在我为另一个项目编写此crate并将其发布之后,我发现json_value_merge

查看它后,我添加了受他们merge_in API启发的merge_index

TODO

  • 编写基准测试

  • 添加globbing迭代器

  • 添加键和值的迭代器

  • 实现带有索引的排序值

  • 实现BFS

  • 使用par-dfs添加rayon支持

  • 编写文档

  • 在文档中添加示例

完成

  • 内联一切
  • 我们真的需要any类型吗?现在看起来很无用 :(
    • 也许可以用它们来定义非常精确的类型?
  • 为合并添加自定义比较器
  • 将排序拆分为额外模块
  • 实现不稳定的排序
  • 为排序和合并添加功能门
  • 添加更多针对类型等的测试
  • 部分eq可以编写在顶层
  • 为dfs添加限制
  • 不暴露Value的包装器,而是使用扩展
  • 为递归合并添加深度参数

依赖

~4.5–6MB
~116K SLoC