fastjsonpatch 0.1.0__tar.gz → 0.1.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (24) hide show
  1. {fastjsonpatch-0.1.0 → fastjsonpatch-0.1.2}/CHANGELOG.md +6 -0
  2. {fastjsonpatch-0.1.0 → fastjsonpatch-0.1.2}/Cargo.lock +1 -1
  3. {fastjsonpatch-0.1.0 → fastjsonpatch-0.1.2}/Cargo.toml +1 -1
  4. {fastjsonpatch-0.1.0 → fastjsonpatch-0.1.2}/PKG-INFO +38 -32
  5. {fastjsonpatch-0.1.0 → fastjsonpatch-0.1.2}/README.md +37 -31
  6. {fastjsonpatch-0.1.0 → fastjsonpatch-0.1.2}/pyproject.toml +1 -1
  7. {fastjsonpatch-0.1.0 → fastjsonpatch-0.1.2}/.github/workflows/CI.yml +0 -0
  8. {fastjsonpatch-0.1.0 → fastjsonpatch-0.1.2}/.gitignore +0 -0
  9. {fastjsonpatch-0.1.0 → fastjsonpatch-0.1.2}/LICENSE +0 -0
  10. {fastjsonpatch-0.1.0 → fastjsonpatch-0.1.2}/MAINTAINING.md +0 -0
  11. {fastjsonpatch-0.1.0 → fastjsonpatch-0.1.2}/THIRD_PARTY_LICENSES.md +0 -0
  12. {fastjsonpatch-0.1.0 → fastjsonpatch-0.1.2}/bench/compare.py +0 -0
  13. {fastjsonpatch-0.1.0 → fastjsonpatch-0.1.2}/python/fastjsonpatch/__init__.py +0 -0
  14. {fastjsonpatch-0.1.0 → fastjsonpatch-0.1.2}/scripts/test_linux_matrix.sh +0 -0
  15. {fastjsonpatch-0.1.0 → fastjsonpatch-0.1.2}/scripts/third_party_licenses.py +0 -0
  16. {fastjsonpatch-0.1.0 → fastjsonpatch-0.1.2}/src/lib.rs +0 -0
  17. {fastjsonpatch-0.1.0 → fastjsonpatch-0.1.2}/tests/rfc6902/LICENSE-APACHE-2.0 +0 -0
  18. {fastjsonpatch-0.1.0 → fastjsonpatch-0.1.2}/tests/rfc6902/README.md +0 -0
  19. {fastjsonpatch-0.1.0 → fastjsonpatch-0.1.2}/tests/rfc6902/spec_tests.json +0 -0
  20. {fastjsonpatch-0.1.0 → fastjsonpatch-0.1.2}/tests/rfc6902/test_rfc6902.py +0 -0
  21. {fastjsonpatch-0.1.0 → fastjsonpatch-0.1.2}/tests/rfc6902/tests.json +0 -0
  22. {fastjsonpatch-0.1.0 → fastjsonpatch-0.1.2}/tests/test_parity.py +0 -0
  23. {fastjsonpatch-0.1.0 → fastjsonpatch-0.1.2}/tests/upstream/test_upstream.py +0 -0
  24. {fastjsonpatch-0.1.0 → fastjsonpatch-0.1.2}/tests/upstream/tests.js +0 -0
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.1.2 (2026-10-11)
4
+
5
+ Documentation only: the README now states only measured facts (including exactly
6
+ which platforms CI tests), and its link to MAINTAINING.md works on PyPI. No code
7
+ changes. (0.1.1 was tagged but not published.)
8
+
3
9
  ## 0.1.0 (2026-10-11)
4
10
 
5
11
  First release. Behaves like jsonpatch 1.34 with `make_patch`, `apply`/`apply_patch`
@@ -23,7 +23,7 @@ checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600"
23
23
 
24
24
  [[package]]
25
25
  name = "fastjsonpatch"
26
- version = "0.1.0"
26
+ version = "0.1.2"
27
27
  dependencies = [
28
28
  "ahash",
29
29
  "pyo3",
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "fastjsonpatch"
3
- version = "0.1.0"
3
+ version = "0.1.2"
4
4
  edition = "2024"
5
5
  description = "Rust core of the fastjsonpatch Python package"
6
6
  license = "BSD-3-Clause"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fastjsonpatch
3
- Version: 0.1.0
3
+ Version: 0.1.2
4
4
  Classifier: Development Status :: 4 - Beta
5
5
  Classifier: Intended Audience :: Developers
6
6
  Classifier: Operating System :: OS Independent
@@ -29,9 +29,9 @@ Project-URL: Repository, https://github.com/amzntiger/fastjsonpatch
29
29
 
30
30
  A drop-in, faster [jsonpatch](https://github.com/stefankoegl/python-json-patch)
31
31
  ([RFC 6902](https://www.rfc-editor.org/rfc/rfc6902) JSON Patch) for Python.
32
- `make_patch` and `apply` run in Rust and return the **same patches, the same documents
33
- and the same exceptions** as jsonpatch 1.34: typically 10-50x faster to make a patch
34
- and 6-15x faster to apply one.
32
+ `make_patch` and `apply` run in Rust and return the **same patches and the same
33
+ documents, and raise exceptions with the same types and messages,** as jsonpatch 1.34.
34
+ In the benchmarks below, making a patch is 9-57x faster and applying one 6-27x faster.
35
35
 
36
36
  ```sh
37
37
  pip install fastjsonpatch
@@ -60,19 +60,18 @@ every Python from 3.12 on. The only dependency is `jsonpointer`.
60
60
  ## Why
61
61
 
62
62
  JSON Patch describes a change to a JSON document as a list of operations (`add`,
63
- `remove`, `replace`, `move`, `copy`, `test`). It is how HTTP `PATCH` requests,
64
- Kubernetes and many APIs express partial updates, and how tools store or send the
65
- difference between two versions of a document.
63
+ `remove`, `replace`, `move`, `copy`, `test`). It is a media type for HTTP `PATCH`
64
+ requests (`application/json-patch+json`), Kubernetes accepts it
65
+ (`kubectl patch --type=json`), and it can store or send the difference between two
66
+ versions of a document.
66
67
 
67
- jsonpatch is the standard Python implementation, and it is written in pure Python.
68
- That is fine for small documents, but the cost grows quickly:
68
+ jsonpatch is written in pure Python. In the measurements below:
69
69
 
70
- - `make_patch` on a 10,000-record document takes about 300 ms (on a fast machine),
71
- and diffing two Kubernetes OpenAPI specs (3.7 MB) takes about 140 ms.
72
- - `apply` deep-copies the whole document first, so even a one-operation patch on a
73
- large document costs tens of milliseconds.
74
- - A web service that applies or computes a patch per request spends 40-75 µs on
75
- each call, even for small resources.
70
+ - `make_patch` on a 10,000-record document takes 290 ms, and diffing two Kubernetes
71
+ OpenAPI specs (3.7 MB and 3.8 MB) takes 136 ms.
72
+ - `apply` deep-copies the whole document first, so a 3-operation patch on the
73
+ 3.8 MB Kubernetes spec takes 71 ms, against 21 µs when applied in place.
74
+ - Applying or computing a patch on a small REST resource takes 47-74 µs per call.
76
75
 
77
76
  fastjsonpatch keeps jsonpatch's behaviour exactly and moves these hot paths to Rust,
78
77
  so existing code gets faster without changes.
@@ -85,10 +84,10 @@ Real-world data:
85
84
 
86
85
  | scenario | size | jsonpatch | fastjsonpatch | speedup |
87
86
  |---|---|---|---|---|
88
- | Kubernetes OpenAPI v1.33 → v1.34: make_patch | 3.7 MB, 283 ops | 136.4 ms | 9.6 ms | **14x** |
87
+ | Kubernetes OpenAPI v1.33 (3.7 MB) → v1.34 (3.8 MB): make_patch | 283 ops | 136.4 ms | 9.6 ms | **14x** |
89
88
  | Kubernetes OpenAPI v1.33 → v1.34: apply | 283 ops | 78.0 ms | 11.4 ms | **7x** |
90
- | 3-op patch on the 3.8 MB spec | | 71.1 ms | 10.1 ms | **7x** |
91
- | 3-op patch on the 3.8 MB spec, `in_place=True` | | 21.2 µs | 4.7 µs | **4x** |
89
+ | 3-op patch on the v1.34 spec | 3.8 MB | 71.1 ms | 10.1 ms | **7x** |
90
+ | 3-op patch on the v1.34 spec, `in_place=True` | 3.8 MB | 21.2 µs | 4.7 µs | **4x** |
92
91
  | PyPI metadata snapshots (8k records): make_patch | 2,487 ops | 255.2 ms | 12.1 ms | **21x** |
93
92
  | PyPI metadata snapshots: apply | 2,487 ops | 91.7 ms | 14.0 ms | **7x** |
94
93
  | REST resource, apply_patch per request | ×1000 | 47.4 ms | 7.5 ms | **6x** |
@@ -105,19 +104,20 @@ Synthetic records shaped like `{"id", "name", "score", "tags": [..], "meta": {..
105
104
  | 2k ints, insert 1 at front | 1 | 17.04 ms | 1.91 ms | **9x** | 581 µs | 21 µs | **27x** |
106
105
  | small config (200 keys), 1 edit | 1 | 1.98 ms | 35 µs | **57x** | 464 µs | 32 µs | **15x** |
107
106
 
108
- Python 3.14 made `copy.deepcopy` about 1.6x faster, so on 3.14 jsonpatch's `apply` on
109
- a large document is faster too and the gap shrinks to about 6x. `make_patch` is not
110
- affected. Run `python bench/compare.py` (from the source distribution) to measure on
107
+ Python 3.14 made `copy.deepcopy` about 1.5x faster, so on 3.14 jsonpatch's `apply` on
108
+ a large document is faster too; on the "10k records, 100 field edits" workload the
109
+ `apply` speedup drops from about 11x to about 6x. The `make_patch` speedup stays about
110
+ the same. Run `python bench/compare.py` (from the source distribution) to measure on
111
111
  your own machine.
112
112
 
113
113
  ## Why it is faster
114
114
 
115
115
  **make_patch.** jsonpatch walks both documents in Python and compares every scalar
116
- with `json.dumps(a) == json.dumps(b)`. That serialisation is about half of the
117
- runtime; the rest is `isinstance` checks against abstract base classes and path
118
- tuples rebuilt at every level. fastjsonpatch walks the documents in Rust over the
119
- CPython objects directly (no conversion to a Rust data structure), compares values
120
- natively with the same rules as the `json.dumps` comparison (`1`, `1.0` and `True`
116
+ with `json.dumps(a) == json.dumps(b)`. Profiling the "10k records" workload with
117
+ cProfile puts about 40% of the time in `json.dumps` and about a third in `isinstance`
118
+ checks against abstract base classes (`MutableMapping`, `MutableSequence`).
119
+ fastjsonpatch walks the documents in Rust over the CPython objects directly (no
120
+ conversion to a Rust data structure), compares values natively with the same rules as the `json.dumps` comparison (`1`, `1.0` and `True`
121
121
  are all different, `-0.0 != 0.0`, NaN equals NaN), keeps the current path on a stack,
122
122
  and takes a single lockstep pass when two dicts have the same keys in the same order.
123
123
  It is a port of jsonpatch's `DiffBuilder`, so it produces the same operations in the
@@ -130,14 +130,14 @@ fastjsonpatch copies each dict and list with one C call and only recurses into v
130
130
  that are themselves containers; it keeps `deepcopy`'s semantics (shared and cyclic
131
131
  references are copied once) but skips the bookkeeping for containers referenced only
132
132
  once. It then resolves the paths and runs the operations without creating
133
- intermediate objects.
133
+ `JsonPointer` or operation objects.
134
134
 
135
135
  ## Compatibility
136
136
 
137
137
  fastjsonpatch is jsonpatch's own module (BSD licensed) with three methods routed to
138
138
  Rust: `JsonPatch.__init__` (validation), `JsonPatch.from_diff` (`make_patch`) and
139
139
  `JsonPatch.apply` (`apply_patch`). Everything else is jsonpatch's code, so the public
140
- API is identical: `JsonPatch`, `make_patch`, `apply_patch`, `JsonPatch.from_string`,
140
+ names are the same: `JsonPatch`, `make_patch`, `apply_patch`, `JsonPatch.from_string`,
141
141
  the operation classes, `DiffBuilder`, `multidict`, and the exceptions
142
142
  `JsonPatchException`, `InvalidJsonPatch`, `JsonPatchConflict`, `JsonPatchTestFailed`
143
143
  (with the same hierarchy, and `JsonPointerException` from jsonpointer).
@@ -151,8 +151,10 @@ Python code, so results never differ:
151
151
  - **apply**: works on plain dicts and lists. An operation that would fail, or that
152
152
  touches anything else, is run by the original operation classes before anything is
153
153
  mutated, so errors have the same type and message.
154
- - Subclasses of `JsonPatch` with custom `operations`, `pointer_cls` or `json_dumper`,
155
- and patches that are not lists or tuples, use the original code.
154
+ - `apply` and validation use the original code for a custom `pointer_cls`, a
155
+ subclass with custom `operations` or an overridden `_get_operation`, and patches
156
+ that are not lists or tuples. `make_patch` uses it for a custom `dumps=` or
157
+ `json_dumper`.
156
158
 
157
159
  Known differences:
158
160
 
@@ -162,13 +164,17 @@ Known differences:
162
164
  - A value that is not a dict, list or JSON scalar inside a document being applied to
163
165
  is copied with `copy.deepcopy` on its own, so aliasing between such values is not
164
166
  preserved.
167
+ - `__version__` is fastjsonpatch's version, and jsonpatch's `__author__` and
168
+ `__website__` are not defined.
165
169
 
166
170
  `fastjsonpatch.__jsonpatch_version__` says which jsonpatch release the behaviour
167
171
  matches (currently `1.34`).
168
172
 
169
173
  ## How it is tested
170
174
 
171
- About 1,570 tests, run on every supported OS and Python version:
175
+ About 1,570 tests. CI runs them with Python 3.12, 3.13 and 3.14 on Linux (x86_64 and
176
+ aarch64, glibc), macOS (arm64 and x86_64) and Windows (x64); the musl wheels are built
177
+ but not tested in CI:
172
178
 
173
179
  - **Parity:** random documents, mutations and patches (valid and invalid) run through
174
180
  both fastjsonpatch and jsonpatch 1.34, comparing the resulting patches and documents
@@ -190,7 +196,7 @@ pytest tests
190
196
  python bench/compare.py # speed vs jsonpatch on this machine
191
197
  ```
192
198
 
193
- See [MAINTAINING.md](MAINTAINING.md) for releases and upkeep.
199
+ See [MAINTAINING.md](https://github.com/amzntiger/fastjsonpatch/blob/main/MAINTAINING.md) for releases and upkeep.
194
200
 
195
201
  ## License
196
202
 
@@ -2,9 +2,9 @@
2
2
 
3
3
  A drop-in, faster [jsonpatch](https://github.com/stefankoegl/python-json-patch)
4
4
  ([RFC 6902](https://www.rfc-editor.org/rfc/rfc6902) JSON Patch) for Python.
5
- `make_patch` and `apply` run in Rust and return the **same patches, the same documents
6
- and the same exceptions** as jsonpatch 1.34: typically 10-50x faster to make a patch
7
- and 6-15x faster to apply one.
5
+ `make_patch` and `apply` run in Rust and return the **same patches and the same
6
+ documents, and raise exceptions with the same types and messages,** as jsonpatch 1.34.
7
+ In the benchmarks below, making a patch is 9-57x faster and applying one 6-27x faster.
8
8
 
9
9
  ```sh
10
10
  pip install fastjsonpatch
@@ -33,19 +33,18 @@ every Python from 3.12 on. The only dependency is `jsonpointer`.
33
33
  ## Why
34
34
 
35
35
  JSON Patch describes a change to a JSON document as a list of operations (`add`,
36
- `remove`, `replace`, `move`, `copy`, `test`). It is how HTTP `PATCH` requests,
37
- Kubernetes and many APIs express partial updates, and how tools store or send the
38
- difference between two versions of a document.
36
+ `remove`, `replace`, `move`, `copy`, `test`). It is a media type for HTTP `PATCH`
37
+ requests (`application/json-patch+json`), Kubernetes accepts it
38
+ (`kubectl patch --type=json`), and it can store or send the difference between two
39
+ versions of a document.
39
40
 
40
- jsonpatch is the standard Python implementation, and it is written in pure Python.
41
- That is fine for small documents, but the cost grows quickly:
41
+ jsonpatch is written in pure Python. In the measurements below:
42
42
 
43
- - `make_patch` on a 10,000-record document takes about 300 ms (on a fast machine),
44
- and diffing two Kubernetes OpenAPI specs (3.7 MB) takes about 140 ms.
45
- - `apply` deep-copies the whole document first, so even a one-operation patch on a
46
- large document costs tens of milliseconds.
47
- - A web service that applies or computes a patch per request spends 40-75 µs on
48
- each call, even for small resources.
43
+ - `make_patch` on a 10,000-record document takes 290 ms, and diffing two Kubernetes
44
+ OpenAPI specs (3.7 MB and 3.8 MB) takes 136 ms.
45
+ - `apply` deep-copies the whole document first, so a 3-operation patch on the
46
+ 3.8 MB Kubernetes spec takes 71 ms, against 21 µs when applied in place.
47
+ - Applying or computing a patch on a small REST resource takes 47-74 µs per call.
49
48
 
50
49
  fastjsonpatch keeps jsonpatch's behaviour exactly and moves these hot paths to Rust,
51
50
  so existing code gets faster without changes.
@@ -58,10 +57,10 @@ Real-world data:
58
57
 
59
58
  | scenario | size | jsonpatch | fastjsonpatch | speedup |
60
59
  |---|---|---|---|---|
61
- | Kubernetes OpenAPI v1.33 → v1.34: make_patch | 3.7 MB, 283 ops | 136.4 ms | 9.6 ms | **14x** |
60
+ | Kubernetes OpenAPI v1.33 (3.7 MB) → v1.34 (3.8 MB): make_patch | 283 ops | 136.4 ms | 9.6 ms | **14x** |
62
61
  | Kubernetes OpenAPI v1.33 → v1.34: apply | 283 ops | 78.0 ms | 11.4 ms | **7x** |
63
- | 3-op patch on the 3.8 MB spec | | 71.1 ms | 10.1 ms | **7x** |
64
- | 3-op patch on the 3.8 MB spec, `in_place=True` | | 21.2 µs | 4.7 µs | **4x** |
62
+ | 3-op patch on the v1.34 spec | 3.8 MB | 71.1 ms | 10.1 ms | **7x** |
63
+ | 3-op patch on the v1.34 spec, `in_place=True` | 3.8 MB | 21.2 µs | 4.7 µs | **4x** |
65
64
  | PyPI metadata snapshots (8k records): make_patch | 2,487 ops | 255.2 ms | 12.1 ms | **21x** |
66
65
  | PyPI metadata snapshots: apply | 2,487 ops | 91.7 ms | 14.0 ms | **7x** |
67
66
  | REST resource, apply_patch per request | ×1000 | 47.4 ms | 7.5 ms | **6x** |
@@ -78,19 +77,20 @@ Synthetic records shaped like `{"id", "name", "score", "tags": [..], "meta": {..
78
77
  | 2k ints, insert 1 at front | 1 | 17.04 ms | 1.91 ms | **9x** | 581 µs | 21 µs | **27x** |
79
78
  | small config (200 keys), 1 edit | 1 | 1.98 ms | 35 µs | **57x** | 464 µs | 32 µs | **15x** |
80
79
 
81
- Python 3.14 made `copy.deepcopy` about 1.6x faster, so on 3.14 jsonpatch's `apply` on
82
- a large document is faster too and the gap shrinks to about 6x. `make_patch` is not
83
- affected. Run `python bench/compare.py` (from the source distribution) to measure on
80
+ Python 3.14 made `copy.deepcopy` about 1.5x faster, so on 3.14 jsonpatch's `apply` on
81
+ a large document is faster too; on the "10k records, 100 field edits" workload the
82
+ `apply` speedup drops from about 11x to about 6x. The `make_patch` speedup stays about
83
+ the same. Run `python bench/compare.py` (from the source distribution) to measure on
84
84
  your own machine.
85
85
 
86
86
  ## Why it is faster
87
87
 
88
88
  **make_patch.** jsonpatch walks both documents in Python and compares every scalar
89
- with `json.dumps(a) == json.dumps(b)`. That serialisation is about half of the
90
- runtime; the rest is `isinstance` checks against abstract base classes and path
91
- tuples rebuilt at every level. fastjsonpatch walks the documents in Rust over the
92
- CPython objects directly (no conversion to a Rust data structure), compares values
93
- natively with the same rules as the `json.dumps` comparison (`1`, `1.0` and `True`
89
+ with `json.dumps(a) == json.dumps(b)`. Profiling the "10k records" workload with
90
+ cProfile puts about 40% of the time in `json.dumps` and about a third in `isinstance`
91
+ checks against abstract base classes (`MutableMapping`, `MutableSequence`).
92
+ fastjsonpatch walks the documents in Rust over the CPython objects directly (no
93
+ conversion to a Rust data structure), compares values natively with the same rules as the `json.dumps` comparison (`1`, `1.0` and `True`
94
94
  are all different, `-0.0 != 0.0`, NaN equals NaN), keeps the current path on a stack,
95
95
  and takes a single lockstep pass when two dicts have the same keys in the same order.
96
96
  It is a port of jsonpatch's `DiffBuilder`, so it produces the same operations in the
@@ -103,14 +103,14 @@ fastjsonpatch copies each dict and list with one C call and only recurses into v
103
103
  that are themselves containers; it keeps `deepcopy`'s semantics (shared and cyclic
104
104
  references are copied once) but skips the bookkeeping for containers referenced only
105
105
  once. It then resolves the paths and runs the operations without creating
106
- intermediate objects.
106
+ `JsonPointer` or operation objects.
107
107
 
108
108
  ## Compatibility
109
109
 
110
110
  fastjsonpatch is jsonpatch's own module (BSD licensed) with three methods routed to
111
111
  Rust: `JsonPatch.__init__` (validation), `JsonPatch.from_diff` (`make_patch`) and
112
112
  `JsonPatch.apply` (`apply_patch`). Everything else is jsonpatch's code, so the public
113
- API is identical: `JsonPatch`, `make_patch`, `apply_patch`, `JsonPatch.from_string`,
113
+ names are the same: `JsonPatch`, `make_patch`, `apply_patch`, `JsonPatch.from_string`,
114
114
  the operation classes, `DiffBuilder`, `multidict`, and the exceptions
115
115
  `JsonPatchException`, `InvalidJsonPatch`, `JsonPatchConflict`, `JsonPatchTestFailed`
116
116
  (with the same hierarchy, and `JsonPointerException` from jsonpointer).
@@ -124,8 +124,10 @@ Python code, so results never differ:
124
124
  - **apply**: works on plain dicts and lists. An operation that would fail, or that
125
125
  touches anything else, is run by the original operation classes before anything is
126
126
  mutated, so errors have the same type and message.
127
- - Subclasses of `JsonPatch` with custom `operations`, `pointer_cls` or `json_dumper`,
128
- and patches that are not lists or tuples, use the original code.
127
+ - `apply` and validation use the original code for a custom `pointer_cls`, a
128
+ subclass with custom `operations` or an overridden `_get_operation`, and patches
129
+ that are not lists or tuples. `make_patch` uses it for a custom `dumps=` or
130
+ `json_dumper`.
129
131
 
130
132
  Known differences:
131
133
 
@@ -135,13 +137,17 @@ Known differences:
135
137
  - A value that is not a dict, list or JSON scalar inside a document being applied to
136
138
  is copied with `copy.deepcopy` on its own, so aliasing between such values is not
137
139
  preserved.
140
+ - `__version__` is fastjsonpatch's version, and jsonpatch's `__author__` and
141
+ `__website__` are not defined.
138
142
 
139
143
  `fastjsonpatch.__jsonpatch_version__` says which jsonpatch release the behaviour
140
144
  matches (currently `1.34`).
141
145
 
142
146
  ## How it is tested
143
147
 
144
- About 1,570 tests, run on every supported OS and Python version:
148
+ About 1,570 tests. CI runs them with Python 3.12, 3.13 and 3.14 on Linux (x86_64 and
149
+ aarch64, glibc), macOS (arm64 and x86_64) and Windows (x64); the musl wheels are built
150
+ but not tested in CI:
145
151
 
146
152
  - **Parity:** random documents, mutations and patches (valid and invalid) run through
147
153
  both fastjsonpatch and jsonpatch 1.34, comparing the resulting patches and documents
@@ -163,7 +169,7 @@ pytest tests
163
169
  python bench/compare.py # speed vs jsonpatch on this machine
164
170
  ```
165
171
 
166
- See [MAINTAINING.md](MAINTAINING.md) for releases and upkeep.
172
+ See [MAINTAINING.md](https://github.com/amzntiger/fastjsonpatch/blob/main/MAINTAINING.md) for releases and upkeep.
167
173
 
168
174
  ## License
169
175
 
@@ -4,7 +4,7 @@ build-backend = "maturin"
4
4
 
5
5
  [project]
6
6
  name = "fastjsonpatch"
7
- version = "0.1.0"
7
+ version = "0.1.2"
8
8
  description = "Drop-in faster jsonpatch (RFC 6902): make_patch and apply in Rust"
9
9
  readme = "README.md"
10
10
  license = "BSD-3-Clause"
File without changes
File without changes
File without changes