2 releases
0.0.4 | Sep 28, 2022 |
---|---|
0.0.3 | Sep 22, 2022 |
#852 in Encoding
190 downloads per month
Used in cargo-feature-combination…
110KB
3K
SLoC
serde_json_merge
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
Dependencies
~4.5–6.5MB
~122K SLoC