Skip to content

romnn/serde_json_merge

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

51 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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