serdejsonmerge

build status test status benchmarks crates.io docs.rs

Merge, index, iterate, and sort a serde_json::Value (recursively).

This library supports in-place merging and sorting using DFS and BFS traversal unline most implementations out there that use recursion and can stack overflow.

toml [dependencies] serde_json_merge = "0"

Usage

For usage examples, check the examples and documentation.

Examples

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

Documentation

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

Linting

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

Benchmarking

```bash cargo install cargo-criterion

full benchmark suite

cargo criterion --features full ```

Benchmark reports from CI are published are available here.

Acknowledgements

After i wrote this crate for another project and decided to publish it, I found jsonvaluemerge.

Looking through it, I added merge_index inspired by their merge_in API.

TODO

DONE: - inline everything - do we really need the any type? so useless right now :( - maybe use them for the very precise type? - add custom comparator for merging - split the sorting into extra module - implement unstable sorting - add feature gates for sort and merge - add few more tests for kind and so on - partial eq can be written top level - add limit to dfs - do not expose wrapper for Value but use extension - add depth parameter to recursive merge