octorules-wirefilter 0.1.0__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.
@@ -0,0 +1,13 @@
1
+ # Rust
2
+ /target/
3
+
4
+ # Maturin build artifacts
5
+ *.so
6
+ *.dylib
7
+ *.pyd
8
+
9
+ # Python test cache
10
+ __pycache__/
11
+
12
+ # OS
13
+ .DS_Store
@@ -0,0 +1,29 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ ## [Unreleased]
6
+
7
+ ### Added
8
+ - `http.response.headers.truncated` field to default scheme (170 fields).
9
+ - Test coverage for `wildcard`, `strict_wildcard`, `bitwise_and`, `xor`,
10
+ `ge`, `le`, `lt` operators.
11
+
12
+ ### Fixed
13
+ - AST visitor now matches `IntOp` variant explicitly instead of using `..`
14
+ catch-all — prevents silent misclassification if wirefilter adds new int ops.
15
+ - Non-UTF-8 byte strings now captured via `from_utf8_lossy` instead of being
16
+ silently dropped.
17
+
18
+ ## [0.1.0] - 2026-03-05
19
+
20
+ ### Added
21
+ - Initial release: PyO3 bindings for Cloudflare's wirefilter expression parser.
22
+ - Phase-aware schemes: default (169 fields, 34 functions) and transform
23
+ (168 fields, 35 functions).
24
+ - AST visitor extracts fields, functions, operators, and literals.
25
+ - `parse_expression(expr, phase=None)` returns structured dict or error.
26
+
27
+ ### Removed
28
+ - Dead `Visitor` trait implementation in `visitor.rs` — the `extract()` method
29
+ uses manual walk methods directly and the trait impl was never called.
@@ -0,0 +1,512 @@
1
+ # This file is automatically @generated by Cargo.
2
+ # It is not intended for manual editing.
3
+ version = 4
4
+
5
+ [[package]]
6
+ name = "addr2line"
7
+ version = "0.25.1"
8
+ source = "registry+https://github.com/rust-lang/crates.io-index"
9
+ checksum = "1b5d307320b3181d6d7954e663bd7c774a838b8220fe0593c86d9fb09f498b4b"
10
+ dependencies = [
11
+ "gimli",
12
+ ]
13
+
14
+ [[package]]
15
+ name = "adler2"
16
+ version = "2.0.1"
17
+ source = "registry+https://github.com/rust-lang/crates.io-index"
18
+ checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa"
19
+
20
+ [[package]]
21
+ name = "aho-corasick"
22
+ version = "1.1.4"
23
+ source = "registry+https://github.com/rust-lang/crates.io-index"
24
+ checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301"
25
+ dependencies = [
26
+ "memchr",
27
+ ]
28
+
29
+ [[package]]
30
+ name = "autocfg"
31
+ version = "1.5.0"
32
+ source = "registry+https://github.com/rust-lang/crates.io-index"
33
+ checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
34
+
35
+ [[package]]
36
+ name = "backtrace"
37
+ version = "0.3.76"
38
+ source = "registry+https://github.com/rust-lang/crates.io-index"
39
+ checksum = "bb531853791a215d7c62a30daf0dde835f381ab5de4589cfe7c649d2cbe92bd6"
40
+ dependencies = [
41
+ "addr2line",
42
+ "cfg-if",
43
+ "libc",
44
+ "miniz_oxide",
45
+ "object",
46
+ "rustc-demangle",
47
+ "windows-link",
48
+ ]
49
+
50
+ [[package]]
51
+ name = "cfg-if"
52
+ version = "1.0.4"
53
+ source = "registry+https://github.com/rust-lang/crates.io-index"
54
+ checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
55
+
56
+ [[package]]
57
+ name = "cidr"
58
+ version = "0.2.3"
59
+ source = "registry+https://github.com/rust-lang/crates.io-index"
60
+ checksum = "6bdf600c45bd958cf2945c445264471cca8b6c8e67bc87b71affd6d7e5682621"
61
+ dependencies = [
62
+ "serde",
63
+ ]
64
+
65
+ [[package]]
66
+ name = "dyn-clone"
67
+ version = "1.0.20"
68
+ source = "registry+https://github.com/rust-lang/crates.io-index"
69
+ checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555"
70
+
71
+ [[package]]
72
+ name = "erased-serde"
73
+ version = "0.4.10"
74
+ source = "registry+https://github.com/rust-lang/crates.io-index"
75
+ checksum = "d2add8a07dd6a8d93ff627029c51de145e12686fbc36ecb298ac22e74cf02dec"
76
+ dependencies = [
77
+ "serde",
78
+ "serde_core",
79
+ "typeid",
80
+ ]
81
+
82
+ [[package]]
83
+ name = "fnv"
84
+ version = "1.0.7"
85
+ source = "registry+https://github.com/rust-lang/crates.io-index"
86
+ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
87
+
88
+ [[package]]
89
+ name = "getrandom"
90
+ version = "0.3.4"
91
+ source = "registry+https://github.com/rust-lang/crates.io-index"
92
+ checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd"
93
+ dependencies = [
94
+ "cfg-if",
95
+ "libc",
96
+ "r-efi",
97
+ "wasip2",
98
+ ]
99
+
100
+ [[package]]
101
+ name = "gimli"
102
+ version = "0.32.3"
103
+ source = "registry+https://github.com/rust-lang/crates.io-index"
104
+ checksum = "e629b9b98ef3dd8afe6ca2bd0f89306cec16d43d907889945bc5d6687f2f13c7"
105
+
106
+ [[package]]
107
+ name = "heck"
108
+ version = "0.5.0"
109
+ source = "registry+https://github.com/rust-lang/crates.io-index"
110
+ checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
111
+
112
+ [[package]]
113
+ name = "indoc"
114
+ version = "2.0.7"
115
+ source = "registry+https://github.com/rust-lang/crates.io-index"
116
+ checksum = "79cf5c93f93228cf8efb3ba362535fb11199ac548a09ce117c9b1adc3030d706"
117
+ dependencies = [
118
+ "rustversion",
119
+ ]
120
+
121
+ [[package]]
122
+ name = "libc"
123
+ version = "0.2.182"
124
+ source = "registry+https://github.com/rust-lang/crates.io-index"
125
+ checksum = "6800badb6cb2082ffd7b6a67e6125bb39f18782f793520caee8cb8846be06112"
126
+
127
+ [[package]]
128
+ name = "memchr"
129
+ version = "2.8.0"
130
+ source = "registry+https://github.com/rust-lang/crates.io-index"
131
+ checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79"
132
+
133
+ [[package]]
134
+ name = "memoffset"
135
+ version = "0.9.1"
136
+ source = "registry+https://github.com/rust-lang/crates.io-index"
137
+ checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a"
138
+ dependencies = [
139
+ "autocfg",
140
+ ]
141
+
142
+ [[package]]
143
+ name = "miniz_oxide"
144
+ version = "0.8.9"
145
+ source = "registry+https://github.com/rust-lang/crates.io-index"
146
+ checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316"
147
+ dependencies = [
148
+ "adler2",
149
+ ]
150
+
151
+ [[package]]
152
+ name = "object"
153
+ version = "0.37.3"
154
+ source = "registry+https://github.com/rust-lang/crates.io-index"
155
+ checksum = "ff76201f031d8863c38aa7f905eca4f53abbfa15f609db4277d44cd8938f33fe"
156
+ dependencies = [
157
+ "memchr",
158
+ ]
159
+
160
+ [[package]]
161
+ name = "octorules-wirefilter"
162
+ version = "0.1.0"
163
+ dependencies = [
164
+ "pyo3",
165
+ "wirefilter-engine",
166
+ ]
167
+
168
+ [[package]]
169
+ name = "once_cell"
170
+ version = "1.21.3"
171
+ source = "registry+https://github.com/rust-lang/crates.io-index"
172
+ checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
173
+
174
+ [[package]]
175
+ name = "paste"
176
+ version = "1.0.15"
177
+ source = "registry+https://github.com/rust-lang/crates.io-index"
178
+ checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a"
179
+
180
+ [[package]]
181
+ name = "portable-atomic"
182
+ version = "1.13.1"
183
+ source = "registry+https://github.com/rust-lang/crates.io-index"
184
+ checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49"
185
+
186
+ [[package]]
187
+ name = "ppv-lite86"
188
+ version = "0.2.21"
189
+ source = "registry+https://github.com/rust-lang/crates.io-index"
190
+ checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9"
191
+ dependencies = [
192
+ "zerocopy",
193
+ ]
194
+
195
+ [[package]]
196
+ name = "proc-macro2"
197
+ version = "1.0.106"
198
+ source = "registry+https://github.com/rust-lang/crates.io-index"
199
+ checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934"
200
+ dependencies = [
201
+ "unicode-ident",
202
+ ]
203
+
204
+ [[package]]
205
+ name = "pyo3"
206
+ version = "0.23.5"
207
+ source = "registry+https://github.com/rust-lang/crates.io-index"
208
+ checksum = "7778bffd85cf38175ac1f545509665d0b9b92a198ca7941f131f85f7a4f9a872"
209
+ dependencies = [
210
+ "cfg-if",
211
+ "indoc",
212
+ "libc",
213
+ "memoffset",
214
+ "once_cell",
215
+ "portable-atomic",
216
+ "pyo3-build-config",
217
+ "pyo3-ffi",
218
+ "pyo3-macros",
219
+ "unindent",
220
+ ]
221
+
222
+ [[package]]
223
+ name = "pyo3-build-config"
224
+ version = "0.23.5"
225
+ source = "registry+https://github.com/rust-lang/crates.io-index"
226
+ checksum = "94f6cbe86ef3bf18998d9df6e0f3fc1050a8c5efa409bf712e661a4366e010fb"
227
+ dependencies = [
228
+ "once_cell",
229
+ "target-lexicon",
230
+ ]
231
+
232
+ [[package]]
233
+ name = "pyo3-ffi"
234
+ version = "0.23.5"
235
+ source = "registry+https://github.com/rust-lang/crates.io-index"
236
+ checksum = "e9f1b4c431c0bb1c8fb0a338709859eed0d030ff6daa34368d3b152a63dfdd8d"
237
+ dependencies = [
238
+ "libc",
239
+ "pyo3-build-config",
240
+ ]
241
+
242
+ [[package]]
243
+ name = "pyo3-macros"
244
+ version = "0.23.5"
245
+ source = "registry+https://github.com/rust-lang/crates.io-index"
246
+ checksum = "fbc2201328f63c4710f68abdf653c89d8dbc2858b88c5d88b0ff38a75288a9da"
247
+ dependencies = [
248
+ "proc-macro2",
249
+ "pyo3-macros-backend",
250
+ "quote",
251
+ "syn",
252
+ ]
253
+
254
+ [[package]]
255
+ name = "pyo3-macros-backend"
256
+ version = "0.23.5"
257
+ source = "registry+https://github.com/rust-lang/crates.io-index"
258
+ checksum = "fca6726ad0f3da9c9de093d6f116a93c1a38e417ed73bf138472cf4064f72028"
259
+ dependencies = [
260
+ "heck",
261
+ "proc-macro2",
262
+ "pyo3-build-config",
263
+ "quote",
264
+ "syn",
265
+ ]
266
+
267
+ [[package]]
268
+ name = "quote"
269
+ version = "1.0.45"
270
+ source = "registry+https://github.com/rust-lang/crates.io-index"
271
+ checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924"
272
+ dependencies = [
273
+ "proc-macro2",
274
+ ]
275
+
276
+ [[package]]
277
+ name = "r-efi"
278
+ version = "5.3.0"
279
+ source = "registry+https://github.com/rust-lang/crates.io-index"
280
+ checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f"
281
+
282
+ [[package]]
283
+ name = "rand"
284
+ version = "0.9.2"
285
+ source = "registry+https://github.com/rust-lang/crates.io-index"
286
+ checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1"
287
+ dependencies = [
288
+ "rand_chacha",
289
+ "rand_core",
290
+ ]
291
+
292
+ [[package]]
293
+ name = "rand_chacha"
294
+ version = "0.9.0"
295
+ source = "registry+https://github.com/rust-lang/crates.io-index"
296
+ checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb"
297
+ dependencies = [
298
+ "ppv-lite86",
299
+ "rand_core",
300
+ ]
301
+
302
+ [[package]]
303
+ name = "rand_core"
304
+ version = "0.9.5"
305
+ source = "registry+https://github.com/rust-lang/crates.io-index"
306
+ checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c"
307
+ dependencies = [
308
+ "getrandom",
309
+ ]
310
+
311
+ [[package]]
312
+ name = "regex-automata"
313
+ version = "0.4.14"
314
+ source = "registry+https://github.com/rust-lang/crates.io-index"
315
+ checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f"
316
+ dependencies = [
317
+ "aho-corasick",
318
+ "memchr",
319
+ "regex-syntax",
320
+ ]
321
+
322
+ [[package]]
323
+ name = "regex-syntax"
324
+ version = "0.8.10"
325
+ source = "registry+https://github.com/rust-lang/crates.io-index"
326
+ checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a"
327
+
328
+ [[package]]
329
+ name = "rustc-demangle"
330
+ version = "0.1.27"
331
+ source = "registry+https://github.com/rust-lang/crates.io-index"
332
+ checksum = "b50b8869d9fc858ce7266cce0194bd74df58b9d0e3f6df3a9fc8eb470d95c09d"
333
+
334
+ [[package]]
335
+ name = "rustversion"
336
+ version = "1.0.22"
337
+ source = "registry+https://github.com/rust-lang/crates.io-index"
338
+ checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d"
339
+
340
+ [[package]]
341
+ name = "seq-macro"
342
+ version = "0.3.6"
343
+ source = "registry+https://github.com/rust-lang/crates.io-index"
344
+ checksum = "1bc711410fbe7399f390ca1c3b60ad0f53f80e95c5eb935e52268a0e2cd49acc"
345
+
346
+ [[package]]
347
+ name = "serde"
348
+ version = "1.0.228"
349
+ source = "registry+https://github.com/rust-lang/crates.io-index"
350
+ checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e"
351
+ dependencies = [
352
+ "serde_core",
353
+ "serde_derive",
354
+ ]
355
+
356
+ [[package]]
357
+ name = "serde_core"
358
+ version = "1.0.228"
359
+ source = "registry+https://github.com/rust-lang/crates.io-index"
360
+ checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad"
361
+ dependencies = [
362
+ "serde_derive",
363
+ ]
364
+
365
+ [[package]]
366
+ name = "serde_derive"
367
+ version = "1.0.228"
368
+ source = "registry+https://github.com/rust-lang/crates.io-index"
369
+ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79"
370
+ dependencies = [
371
+ "proc-macro2",
372
+ "quote",
373
+ "syn",
374
+ ]
375
+
376
+ [[package]]
377
+ name = "sliceslice"
378
+ version = "0.4.3"
379
+ source = "registry+https://github.com/rust-lang/crates.io-index"
380
+ checksum = "361b80c452f3f8cc2426bf996059740b4c78ef5a5aeb1c1852d8ac4f561b8b4c"
381
+ dependencies = [
382
+ "cfg-if",
383
+ "memchr",
384
+ "paste",
385
+ "seq-macro",
386
+ ]
387
+
388
+ [[package]]
389
+ name = "syn"
390
+ version = "2.0.117"
391
+ source = "registry+https://github.com/rust-lang/crates.io-index"
392
+ checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99"
393
+ dependencies = [
394
+ "proc-macro2",
395
+ "quote",
396
+ "unicode-ident",
397
+ ]
398
+
399
+ [[package]]
400
+ name = "target-lexicon"
401
+ version = "0.12.16"
402
+ source = "registry+https://github.com/rust-lang/crates.io-index"
403
+ checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1"
404
+
405
+ [[package]]
406
+ name = "thiserror"
407
+ version = "2.0.18"
408
+ source = "registry+https://github.com/rust-lang/crates.io-index"
409
+ checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4"
410
+ dependencies = [
411
+ "thiserror-impl",
412
+ ]
413
+
414
+ [[package]]
415
+ name = "thiserror-impl"
416
+ version = "2.0.18"
417
+ source = "registry+https://github.com/rust-lang/crates.io-index"
418
+ checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5"
419
+ dependencies = [
420
+ "proc-macro2",
421
+ "quote",
422
+ "syn",
423
+ ]
424
+
425
+ [[package]]
426
+ name = "typeid"
427
+ version = "1.0.3"
428
+ source = "registry+https://github.com/rust-lang/crates.io-index"
429
+ checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c"
430
+
431
+ [[package]]
432
+ name = "unicode-ident"
433
+ version = "1.0.24"
434
+ source = "registry+https://github.com/rust-lang/crates.io-index"
435
+ checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
436
+
437
+ [[package]]
438
+ name = "unindent"
439
+ version = "0.2.4"
440
+ source = "registry+https://github.com/rust-lang/crates.io-index"
441
+ checksum = "7264e107f553ccae879d21fbea1d6724ac785e8c3bfc762137959b5802826ef3"
442
+
443
+ [[package]]
444
+ name = "wasip2"
445
+ version = "1.0.2+wasi-0.2.9"
446
+ source = "registry+https://github.com/rust-lang/crates.io-index"
447
+ checksum = "9517f9239f02c069db75e65f174b3da828fe5f5b945c4dd26bd25d89c03ebcf5"
448
+ dependencies = [
449
+ "wit-bindgen",
450
+ ]
451
+
452
+ [[package]]
453
+ name = "wildcard"
454
+ version = "0.3.0"
455
+ source = "registry+https://github.com/rust-lang/crates.io-index"
456
+ checksum = "f9b0540e91e49de3817c314da0dd3bc518093ceacc6ea5327cb0e1eb073e5189"
457
+ dependencies = [
458
+ "thiserror",
459
+ ]
460
+
461
+ [[package]]
462
+ name = "windows-link"
463
+ version = "0.2.1"
464
+ source = "registry+https://github.com/rust-lang/crates.io-index"
465
+ checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"
466
+
467
+ [[package]]
468
+ name = "wirefilter-engine"
469
+ version = "0.7.0"
470
+ source = "git+https://github.com/cloudflare/wirefilter?rev=6621924baf36f8ba7f603433dbe6f857ad3d5589#6621924baf36f8ba7f603433dbe6f857ad3d5589"
471
+ dependencies = [
472
+ "backtrace",
473
+ "cfg-if",
474
+ "cidr",
475
+ "dyn-clone",
476
+ "erased-serde",
477
+ "fnv",
478
+ "getrandom",
479
+ "memchr",
480
+ "rand",
481
+ "regex-automata",
482
+ "serde",
483
+ "sliceslice",
484
+ "thiserror",
485
+ "wildcard",
486
+ ]
487
+
488
+ [[package]]
489
+ name = "wit-bindgen"
490
+ version = "0.51.0"
491
+ source = "registry+https://github.com/rust-lang/crates.io-index"
492
+ checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5"
493
+
494
+ [[package]]
495
+ name = "zerocopy"
496
+ version = "0.8.40"
497
+ source = "registry+https://github.com/rust-lang/crates.io-index"
498
+ checksum = "a789c6e490b576db9f7e6b6d661bcc9799f7c0ac8352f56ea20193b2681532e5"
499
+ dependencies = [
500
+ "zerocopy-derive",
501
+ ]
502
+
503
+ [[package]]
504
+ name = "zerocopy-derive"
505
+ version = "0.8.40"
506
+ source = "registry+https://github.com/rust-lang/crates.io-index"
507
+ checksum = "f65c489a7071a749c849713807783f70672b28094011623e200cb86dcb835953"
508
+ dependencies = [
509
+ "proc-macro2",
510
+ "quote",
511
+ "syn",
512
+ ]
@@ -0,0 +1,22 @@
1
+ [package]
2
+ name = "octorules-wirefilter"
3
+ version = "0.1.0"
4
+ edition = "2024"
5
+ license = "Apache-2.0"
6
+ description = "Wirefilter expression parser FFI bindings for octorules"
7
+ authors = ["Martin Simon", "Doctena S.A."]
8
+ repository = "https://github.com/doctena-org/octorules-wirefilter"
9
+ homepage = "https://github.com/doctena-org/octorules-wirefilter"
10
+ keywords = ["cloudflare", "wirefilter", "parser", "ffi"]
11
+ categories = ["parser-implementations", "api-bindings"]
12
+ rust-version = "1.86"
13
+ exclude = [".github/", "tests/"]
14
+ readme = "README.md"
15
+
16
+ [lib]
17
+ name = "octorules_wirefilter"
18
+ crate-type = ["cdylib"]
19
+
20
+ [dependencies]
21
+ pyo3 = { version = "0.23", features = ["extension-module"] }
22
+ wirefilter-engine = { git = "https://github.com/cloudflare/wirefilter", rev = "6621924baf36f8ba7f603433dbe6f857ad3d5589" }