dumpling-cli 0.6.0__tar.gz → 0.7.0b0__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 (51) hide show
  1. {dumpling_cli-0.6.0 → dumpling_cli-0.7.0b0}/.dumplingconf.example +4 -2
  2. {dumpling_cli-0.6.0 → dumpling_cli-0.7.0b0}/.github/workflows/ci.yml +1 -1
  3. {dumpling_cli-0.6.0 → dumpling_cli-0.7.0b0}/.github/workflows/platform-compat-latest.yml +1 -1
  4. {dumpling_cli-0.6.0 → dumpling_cli-0.7.0b0}/.github/workflows/platform-compat-matrix.yml +1 -1
  5. {dumpling_cli-0.6.0 → dumpling_cli-0.7.0b0}/.github/workflows/policy-lint.yml +1 -1
  6. {dumpling_cli-0.6.0 → dumpling_cli-0.7.0b0}/.github/workflows/publish.yml +1 -1
  7. {dumpling_cli-0.6.0 → dumpling_cli-0.7.0b0}/.github/workflows/release.yml +1 -1
  8. {dumpling_cli-0.6.0 → dumpling_cli-0.7.0b0}/.github/workflows/tests.yml +1 -1
  9. {dumpling_cli-0.6.0 → dumpling_cli-0.7.0b0}/AGENTS.md +4 -1
  10. {dumpling_cli-0.6.0 → dumpling_cli-0.7.0b0}/CHANGELOG.md +27 -1
  11. {dumpling_cli-0.6.0 → dumpling_cli-0.7.0b0}/Cargo.lock +132 -3
  12. {dumpling_cli-0.6.0 → dumpling_cli-0.7.0b0}/Cargo.toml +5 -1
  13. dumpling_cli-0.7.0b0/LICENSE +21 -0
  14. {dumpling_cli-0.6.0 → dumpling_cli-0.7.0b0}/PKG-INFO +217 -190
  15. {dumpling_cli-0.6.0 → dumpling_cli-0.7.0b0}/README.md +213 -189
  16. {dumpling_cli-0.6.0 → dumpling_cli-0.7.0b0}/docs/src/configuration.md +118 -9
  17. dumpling_cli-0.7.0b0/docs/src/getting-started.md +63 -0
  18. {dumpling_cli-0.6.0 → dumpling_cli-0.7.0b0}/docs/src/index.md +3 -1
  19. {dumpling_cli-0.6.0 → dumpling_cli-0.7.0b0}/pyproject.toml +4 -1
  20. dumpling_cli-0.7.0b0/src/compressed_input.rs +340 -0
  21. dumpling_cli-0.7.0b0/src/dump_input_detect.rs +171 -0
  22. dumpling_cli-0.7.0b0/src/dump_input_resolve.rs +224 -0
  23. {dumpling_cli-0.6.0 → dumpling_cli-0.7.0b0}/src/filter.rs +93 -0
  24. {dumpling_cli-0.6.0 → dumpling_cli-0.7.0b0}/src/lint.rs +5 -0
  25. dumpling_cli-0.7.0b0/src/log_sanitize.rs +29 -0
  26. {dumpling_cli-0.6.0 → dumpling_cli-0.7.0b0}/src/main.rs +375 -205
  27. dumpling_cli-0.7.0b0/src/pg_restore_decode.rs +221 -0
  28. dumpling_cli-0.7.0b0/src/scaffold.rs +255 -0
  29. {dumpling_cli-0.6.0 → dumpling_cli-0.7.0b0}/src/scan.rs +2 -1
  30. {dumpling_cli-0.6.0 → dumpling_cli-0.7.0b0}/src/seal.rs +23 -26
  31. {dumpling_cli-0.6.0 → dumpling_cli-0.7.0b0}/src/settings.rs +145 -9
  32. {dumpling_cli-0.6.0 → dumpling_cli-0.7.0b0}/src/sql.rs +863 -121
  33. {dumpling_cli-0.6.0 → dumpling_cli-0.7.0b0}/src/transform.rs +323 -2
  34. dumpling_cli-0.6.0/docs/src/getting-started.md +0 -33
  35. {dumpling_cli-0.6.0 → dumpling_cli-0.7.0b0}/.github/workflows/docs-pr.yml +0 -0
  36. {dumpling_cli-0.6.0 → dumpling_cli-0.7.0b0}/.github/workflows/docs.yml +0 -0
  37. {dumpling_cli-0.6.0 → dumpling_cli-0.7.0b0}/.gitignore +0 -0
  38. {dumpling_cli-0.6.0 → dumpling_cli-0.7.0b0}/CONTRIBUTING.md +0 -0
  39. {dumpling_cli-0.6.0 → dumpling_cli-0.7.0b0}/CONTRIBUTORS.md +0 -0
  40. {dumpling_cli-0.6.0 → dumpling_cli-0.7.0b0}/MAINTENANCE.md +0 -0
  41. {dumpling_cli-0.6.0 → dumpling_cli-0.7.0b0}/assets/logo.svg +0 -0
  42. {dumpling_cli-0.6.0 → dumpling_cli-0.7.0b0}/book.toml +0 -0
  43. {dumpling_cli-0.6.0 → dumpling_cli-0.7.0b0}/datetime_out.sql +0 -0
  44. {dumpling_cli-0.6.0 → dumpling_cli-0.7.0b0}/datetime_sample.sql +0 -0
  45. {dumpling_cli-0.6.0 → dumpling_cli-0.7.0b0}/docs/src/SUMMARY.md +0 -0
  46. {dumpling_cli-0.6.0 → dumpling_cli-0.7.0b0}/docs/src/ci-guardrails.md +0 -0
  47. {dumpling_cli-0.6.0 → dumpling_cli-0.7.0b0}/docs/src/releasing.md +0 -0
  48. {dumpling_cli-0.6.0 → dumpling_cli-0.7.0b0}/rust-toolchain.toml +0 -0
  49. {dumpling_cli-0.6.0 → dumpling_cli-0.7.0b0}/scripts/setup-dev.sh +0 -0
  50. {dumpling_cli-0.6.0 → dumpling_cli-0.7.0b0}/src/faker_dispatch.rs +0 -0
  51. {dumpling_cli-0.6.0 → dumpling_cli-0.7.0b0}/src/report.rs +0 -0
@@ -59,8 +59,10 @@ last_login = { strategy = "datetime_fuzz" }
59
59
  wake_time = { strategy = "time_fuzz", min_seconds = -3600, max_seconds = 3600 }
60
60
 
61
61
  [rules."public.orders"]
62
- # credit card — redact entirely; force as quoted string
63
- credit_card = { strategy = "redact", as_string = true }
62
+ # credit card — Luhn-valid synthetic PAN (length 13–19); use domain for stable FKs across dumps
63
+ credit_card = { strategy = "payment_card", length = 16, domain = "order_pan" }
64
+ # monetary / numeric — random decimal in range with fixed fractional digits
65
+ order_total = { strategy = "decimal", min = 0, max = 99999, scale = 2, domain = "order_amount" }
64
66
  # keep the same anonymized email as users table via shared domain
65
67
  customer_email = { strategy = "faker", faker = "internet::SafeEmail", domain = "customer_identity" }
66
68
 
@@ -23,7 +23,7 @@ jobs:
23
23
  components: rustfmt, clippy
24
24
 
25
25
  - name: Cache Cargo build artifacts
26
- uses: Swatinem/rust-cache@v2
26
+ uses: Swatinem/rust-cache@v2.9.1
27
27
 
28
28
  - name: Check formatting
29
29
  run: cargo fmt --all -- --check
@@ -28,7 +28,7 @@ jobs:
28
28
  uses: dtolnay/rust-toolchain@stable
29
29
 
30
30
  - name: Cache Cargo build artifacts
31
- uses: Swatinem/rust-cache@v2
31
+ uses: Swatinem/rust-cache@v2.9.1
32
32
 
33
33
  - name: Build release binary
34
34
  run: cargo build --release --locked
@@ -26,7 +26,7 @@ jobs:
26
26
  uses: dtolnay/rust-toolchain@stable
27
27
 
28
28
  - name: Cache Cargo build artifacts
29
- uses: Swatinem/rust-cache@v2
29
+ uses: Swatinem/rust-cache@v2.9.1
30
30
 
31
31
  - name: Build release binary
32
32
  run: cargo build --release --locked
@@ -38,7 +38,7 @@ jobs:
38
38
  uses: dtolnay/rust-toolchain@stable
39
39
 
40
40
  - name: Cache Cargo build artifacts
41
- uses: Swatinem/rust-cache@v2
41
+ uses: Swatinem/rust-cache@v2.9.1
42
42
 
43
43
  - name: Build dumpling
44
44
  run: cargo build --release --locked
@@ -38,7 +38,7 @@ jobs:
38
38
  uses: dtolnay/rust-toolchain@stable
39
39
 
40
40
  - name: Cache Cargo build artifacts
41
- uses: Swatinem/rust-cache@v2
41
+ uses: Swatinem/rust-cache@v2.9.1
42
42
 
43
43
  - name: Set up Python
44
44
  uses: actions/setup-python@v6
@@ -21,7 +21,7 @@ jobs:
21
21
  components: rustfmt, clippy
22
22
 
23
23
  - name: Cache Cargo build artifacts
24
- uses: Swatinem/rust-cache@v2
24
+ uses: Swatinem/rust-cache@v2.9.1
25
25
 
26
26
  - name: Validate formatting
27
27
  run: cargo fmt --all -- --check
@@ -21,7 +21,7 @@ jobs:
21
21
  uses: dtolnay/rust-toolchain@stable
22
22
 
23
23
  - name: Cache Cargo build artifacts
24
- uses: Swatinem/rust-cache@v2
24
+ uses: Swatinem/rust-cache@v2.9.1
25
25
 
26
26
  - name: Run cargo tests
27
27
  run: cargo test --all-targets --all-features
@@ -28,6 +28,9 @@ src/
28
28
  filter.rs — Row-filter predicate evaluation (eq/neq/like/regex/JSON-path/…)
29
29
  scan.rs — Post-transform residual PII scanner (email/SSN/PAN/token regex)
30
30
  report.rs — JSON report data structures and Reporter helper
31
+ compressed_input.rs — gzip/ZIP wrappers; streaming vs temp materialization
32
+ dump_input_resolve.rs — shared `--input` file resolution for anonymize + scaffold-config
33
+ dump_input_detect.rs — PGDMP / directory dumps / MSSQL sniff helpers
31
34
  docs/src/ — mdBook documentation source
32
35
  .github/ — CI/CD GitHub Actions workflows
33
36
  Cargo.toml — Rust package manifest
@@ -221,7 +224,7 @@ Follow these steps in order. Do not skip any step.
221
224
 
222
225
  7. **Tests**: Add `#[test]` functions in `src/transform.rs` (unit-test strategy output values) and in `src/sql.rs` (end-to-end pipeline test). Use `set_random_seed(N)` for reproducibility.
223
226
 
224
- 8. **`README.md`**: Add a row to the "Anonymization strategies" table.
227
+ 8. **`README.md`**: Document the strategy under *Configuration Anonymization strategies* (per-strategy subsection with accepted options), and mention any new spec fields in `AnonymizerSpec`’s doc comment in `settings.rs`.
225
228
 
226
229
  **`faker` strategy:** Config only carries string identifiers; Dumpling never evaluates user Rust from config. To ship a new generator, add dispatch in `src/faker_dispatch.rs` and validation in `validate_anonymizer_spec` for the `faker` branch. Upstream reference: [`fake` on docs.rs](https://docs.rs/fake/latest/fake/), [`fake::faker` module index](https://docs.rs/fake/latest/fake/faker/index.html), [source on GitHub](https://github.com/cksac/fake-rs).
227
230
 
@@ -7,11 +7,35 @@ and this project follows [Semantic Versioning](https://semver.org/spec/v2.0.0.ht
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.7.0-beta] - 2026-05-07
11
+
12
+ Second **0.7.x** prerelease toward stable **0.7.0**.
13
+
14
+ ### Added
15
+
16
+ - **Gzip and ZIP inputs**: plain-SQL payloads inside **gzip** are decompressed **in-process** (streamed) when possible—no temporary file. Dumpling still materializes to the temp directory when required: **ZIP** archives (random-access central directory), **gzip wrapping `PGDMP`** or an inner **ZIP** (nested wrappers), or other cases where a filesystem path is needed for `pg_restore`. Temporary files are registered for removal when processing finishes. **`--in-place` is rejected** only when Dumpling had to write a **temporary** decompressed/extracted file (not when gzip plain-SQL streaming was used). Full multi-file ZIP packages (for example BACPAC) are still not supported as SQL input.
17
+
18
+ ### Changed
19
+
20
+ - **CLI**: removed **`--dump-decode`**. PostgreSQL **custom-format** (`PGDMP`) and **directory-format** (`toc.dat`) inputs are auto-detected when `--format postgres` (default) and decoded with `pg_restore -f -`. Options renamed: **`--pg-restore-arg`** (repeatable, was `--dump-decode-arg`), **`--keep-original`** (was `--dump-decode-keep-input` / `--pg-restore-keep-input`). **`--keep-original` is incompatible with `--in-place`** (use `--output` or stdout). Optional `[pg_restore]` table in config for default path/args.
21
+
22
+ ## [0.7.0-alpha] - 2026-05-04
23
+
24
+ First **0.7.x** prerelease toward stable **0.7.0** (superseded by **0.7.0-beta** for ongoing development builds).
25
+
26
+ ### Removed
27
+
28
+ - **`--include-table` / `--exclude-table`**: these CLI flags and the associated per-table skip logic in the SQL stream processor are removed. Anonymize the full dump, or split/filter dumps outside Dumpling if you need a smaller input.
29
+
30
+ ### Changed
31
+
32
+ - **Dump seal (`v=3`):** the fingerprint JSON no longer includes table-filter fields. Seals produced by Dumpling **0.6.x** (`v=2`) will not match **0.7.x**; the first line is treated as stale and the dump is re-processed.
33
+
10
34
  ## [0.6.0] - 2026-05-03
11
35
 
12
36
  ### Added
13
37
 
14
- - **Dump seal** (leading `-- dumpling-seal:` SQL comment): records Dumpling version, security profile, a SHA-256 fingerprint of the resolved policy, and runtime CLI options that affect transforms (`--format`, sorted `--include-table` / `--exclude-table`, effective PRNG seed in standard profile). When the input already begins with a **matching** seal, the remainder is copied through unchanged; stale or unknown seal lines are stripped and the dump is re-processed. See README for full semantics ([#58](https://github.com/ababic/dumpling/pull/58)).
38
+ - **Dump seal** (leading `-- dumpling-seal:` SQL comment): records Dumpling version, security profile, a SHA-256 fingerprint of the resolved policy, and runtime CLI options that affect transforms (`--format` and the effective PRNG seed in standard profile; `null` in hardened, where seeds are ignored). When the input already begins with a **matching** seal, the remainder is copied through unchanged; stale or unknown seal lines are stripped and the dump is re-processed. See README for full semantics ([#58](https://github.com/ababic/dumpling/pull/58)).
15
39
  - **`--stats`**: prints `wall_ms` plus `domain_cache_hits` and `domain_cache_misses` for quick profiling of large runs ([#59](https://github.com/ababic/dumpling/pull/59)).
16
40
  - **`CONTRIBUTORS.md`** ([#59](https://github.com/ababic/dumpling/pull/59)).
17
41
 
@@ -101,6 +125,8 @@ and this project follows [Semantic Versioning](https://semver.org/spec/v2.0.0.ht
101
125
  - Configurable output scan severities and per-category thresholds via `[output_scan]`.
102
126
  - JSON report section for output scan findings including category, count, threshold, severity, and sample locations.
103
127
 
128
+ [0.7.0-beta]: https://github.com/ababic/dumpling/compare/v0.7.0-alpha...v0.7.0-beta
129
+ [0.7.0-alpha]: https://github.com/ababic/dumpling/compare/v0.6.0...v0.7.0-alpha
104
130
  [0.6.0]: https://github.com/ababic/dumpling/compare/v0.5.0...v0.6.0
105
131
  [0.5.0]: https://github.com/ababic/dumpling/compare/v0.4.3...v0.5.0
106
132
  [0.4.3]: https://github.com/ababic/dumpling/compare/v0.4.2...v0.4.3
@@ -2,6 +2,12 @@
2
2
  # It is not intended for manual editing.
3
3
  version = 4
4
4
 
5
+ [[package]]
6
+ name = "adler2"
7
+ version = "2.0.1"
8
+ source = "registry+https://github.com/rust-lang/crates.io-index"
9
+ checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa"
10
+
5
11
  [[package]]
6
12
  name = "aho-corasick"
7
13
  version = "1.1.4"
@@ -76,6 +82,15 @@ version = "1.0.102"
76
82
  source = "registry+https://github.com/rust-lang/crates.io-index"
77
83
  checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c"
78
84
 
85
+ [[package]]
86
+ name = "arbitrary"
87
+ version = "1.4.2"
88
+ source = "registry+https://github.com/rust-lang/crates.io-index"
89
+ checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1"
90
+ dependencies = [
91
+ "derive_arbitrary",
92
+ ]
93
+
79
94
  [[package]]
80
95
  name = "autocfg"
81
96
  version = "1.5.0"
@@ -187,6 +202,21 @@ dependencies = [
187
202
  "libc",
188
203
  ]
189
204
 
205
+ [[package]]
206
+ name = "crc32fast"
207
+ version = "1.5.0"
208
+ source = "registry+https://github.com/rust-lang/crates.io-index"
209
+ checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511"
210
+ dependencies = [
211
+ "cfg-if",
212
+ ]
213
+
214
+ [[package]]
215
+ name = "crossbeam-utils"
216
+ version = "0.8.21"
217
+ source = "registry+https://github.com/rust-lang/crates.io-index"
218
+ checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"
219
+
190
220
  [[package]]
191
221
  name = "crypto-common"
192
222
  version = "0.1.7"
@@ -231,6 +261,17 @@ dependencies = [
231
261
  "syn",
232
262
  ]
233
263
 
264
+ [[package]]
265
+ name = "derive_arbitrary"
266
+ version = "1.4.2"
267
+ source = "registry+https://github.com/rust-lang/crates.io-index"
268
+ checksum = "1e567bd82dcff979e4b03460c307b3cdc9e96fde3d73bed1496d2bc75d9dd62a"
269
+ dependencies = [
270
+ "proc-macro2",
271
+ "quote",
272
+ "syn",
273
+ ]
274
+
234
275
  [[package]]
235
276
  name = "deunicode"
236
277
  version = "1.6.2"
@@ -248,6 +289,17 @@ dependencies = [
248
289
  "subtle",
249
290
  ]
250
291
 
292
+ [[package]]
293
+ name = "displaydoc"
294
+ version = "0.2.5"
295
+ source = "registry+https://github.com/rust-lang/crates.io-index"
296
+ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0"
297
+ dependencies = [
298
+ "proc-macro2",
299
+ "quote",
300
+ "syn",
301
+ ]
302
+
251
303
  [[package]]
252
304
  name = "dummy"
253
305
  version = "0.11.0"
@@ -262,12 +314,13 @@ dependencies = [
262
314
 
263
315
  [[package]]
264
316
  name = "dumpling"
265
- version = "0.6.0"
317
+ version = "0.7.0-beta"
266
318
  dependencies = [
267
319
  "anyhow",
268
320
  "chrono",
269
321
  "clap",
270
322
  "fake",
323
+ "flate2",
271
324
  "getrandom 0.2.17",
272
325
  "hmac",
273
326
  "lazy_static",
@@ -276,8 +329,9 @@ dependencies = [
276
329
  "serde",
277
330
  "serde_json",
278
331
  "sha2",
279
- "thiserror",
332
+ "thiserror 1.0.69",
280
333
  "toml",
334
+ "zip",
281
335
  ]
282
336
 
283
337
  [[package]]
@@ -310,6 +364,16 @@ version = "0.1.9"
310
364
  source = "registry+https://github.com/rust-lang/crates.io-index"
311
365
  checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582"
312
366
 
367
+ [[package]]
368
+ name = "flate2"
369
+ version = "1.1.9"
370
+ source = "registry+https://github.com/rust-lang/crates.io-index"
371
+ checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c"
372
+ dependencies = [
373
+ "crc32fast",
374
+ "miniz_oxide",
375
+ ]
376
+
313
377
  [[package]]
314
378
  name = "fnv"
315
379
  version = "1.0.7"
@@ -456,6 +520,16 @@ version = "2.8.0"
456
520
  source = "registry+https://github.com/rust-lang/crates.io-index"
457
521
  checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79"
458
522
 
523
+ [[package]]
524
+ name = "miniz_oxide"
525
+ version = "0.8.9"
526
+ source = "registry+https://github.com/rust-lang/crates.io-index"
527
+ checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316"
528
+ dependencies = [
529
+ "adler2",
530
+ "simd-adler32",
531
+ ]
532
+
459
533
  [[package]]
460
534
  name = "num-traits"
461
535
  version = "0.2.19"
@@ -643,6 +717,12 @@ version = "1.3.0"
643
717
  source = "registry+https://github.com/rust-lang/crates.io-index"
644
718
  checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
645
719
 
720
+ [[package]]
721
+ name = "simd-adler32"
722
+ version = "0.3.9"
723
+ source = "registry+https://github.com/rust-lang/crates.io-index"
724
+ checksum = "703d5c7ef118737c72f1af64ad2f6f8c5e1921f818cdcb97b8fe6fc69bf66214"
725
+
646
726
  [[package]]
647
727
  name = "strsim"
648
728
  version = "0.11.1"
@@ -672,7 +752,16 @@ version = "1.0.69"
672
752
  source = "registry+https://github.com/rust-lang/crates.io-index"
673
753
  checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52"
674
754
  dependencies = [
675
- "thiserror-impl",
755
+ "thiserror-impl 1.0.69",
756
+ ]
757
+
758
+ [[package]]
759
+ name = "thiserror"
760
+ version = "2.0.18"
761
+ source = "registry+https://github.com/rust-lang/crates.io-index"
762
+ checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4"
763
+ dependencies = [
764
+ "thiserror-impl 2.0.18",
676
765
  ]
677
766
 
678
767
  [[package]]
@@ -686,6 +775,17 @@ dependencies = [
686
775
  "syn",
687
776
  ]
688
777
 
778
+ [[package]]
779
+ name = "thiserror-impl"
780
+ version = "2.0.18"
781
+ source = "registry+https://github.com/rust-lang/crates.io-index"
782
+ checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5"
783
+ dependencies = [
784
+ "proc-macro2",
785
+ "quote",
786
+ "syn",
787
+ ]
788
+
689
789
  [[package]]
690
790
  name = "toml"
691
791
  version = "0.8.23"
@@ -914,8 +1014,37 @@ dependencies = [
914
1014
  "syn",
915
1015
  ]
916
1016
 
1017
+ [[package]]
1018
+ name = "zip"
1019
+ version = "2.4.2"
1020
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1021
+ checksum = "fabe6324e908f85a1c52063ce7aa26b68dcb7eb6dbc83a2d148403c9bc3eba50"
1022
+ dependencies = [
1023
+ "arbitrary",
1024
+ "crc32fast",
1025
+ "crossbeam-utils",
1026
+ "displaydoc",
1027
+ "flate2",
1028
+ "indexmap",
1029
+ "memchr",
1030
+ "thiserror 2.0.18",
1031
+ "zopfli",
1032
+ ]
1033
+
917
1034
  [[package]]
918
1035
  name = "zmij"
919
1036
  version = "1.0.21"
920
1037
  source = "registry+https://github.com/rust-lang/crates.io-index"
921
1038
  checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa"
1039
+
1040
+ [[package]]
1041
+ name = "zopfli"
1042
+ version = "0.8.3"
1043
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1044
+ checksum = "f05cd8797d63865425ff89b5c4a48804f35ba0ce8d125800027ad6017d2b5249"
1045
+ dependencies = [
1046
+ "bumpalo",
1047
+ "crc32fast",
1048
+ "log",
1049
+ "simd-adler32",
1050
+ ]
@@ -1,7 +1,9 @@
1
1
  [package]
2
2
  name = "dumpling"
3
- version = "0.6.0"
3
+ version = "0.7.0-beta"
4
4
  edition = "2021"
5
+ license = "MIT"
6
+ authors = ["Andy Babic"]
5
7
  readme = "README.md"
6
8
 
7
9
  [dependencies]
@@ -19,3 +21,5 @@ chrono = { version = "0.4" }
19
21
  lazy_static = "1"
20
22
  fake = { version = "4", features = ["derive"] }
21
23
  rand = "0.9"
24
+ flate2 = "1"
25
+ zip = { version = "2", default-features = false, features = ["deflate"] }
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Andy Babic
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.