serde_json_merge

Crates.ioserde_json_merge
lib.rsserde_json_merge
version0.0.4
sourcesrc
created_at2022-09-22 12:11:47.93139
updated_at2022-09-28 15:16:13.121957
descriptionMerge, index, iterate, and sort a serde_json::Value (recursively)
homepagehttps://github.com/romnn/serde_json_merge
repositoryhttps://github.com/romnn/serde_json_merge
max_upload_size
id671666
size120,095
Roman Dahm (romnn)

documentation

README

serde_json_merge

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.

[dependencies]
serde_json_merge = "0"

Usage

For usage examples, check the examples and documentation.

Examples

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

Documentation

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

Linting

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

Benchmarking

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 json_value_merge.

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

TODO

  • write benchmarks

  • add globbing iter

  • add iters for keys and values

  • implement sorting values with indices

  • implement bfs

  • add rayon support using par-dfs

  • write documentation

  • add examples in the documentation

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
Commit count: 51

cargo fmt