selma 0.1.6 → 0.2.2

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1c8f57d5ae3f09a9457ea5a2ed3bd8db347bbb2b4d696cd660e53fe7dd77b3e1
4
- data.tar.gz: 7722be4f78d25760464a28679cd92cede4ae0013ef1f5a170a68945e500270f3
3
+ metadata.gz: 50b438a2bdc8e13515ccc76c7e57a6fffb492c3ac7ff62781226ca5288f22913
4
+ data.tar.gz: 66b31905df161bf62a2dd88df9a5ead5e9f0a0f3a2d1464b669634dc966bc9a3
5
5
  SHA512:
6
- metadata.gz: afd41b0e75bec3fa4f6ffffa20a3b8642fcbf3338fe2e9fa1439dfa54cb70a007d86fe15f9c6c78f1815d45305309f2ccef19987165e2e8c30018286d6d94576
7
- data.tar.gz: e07f434d483f5ef6b7181c4f4197b258a83b35958eda0c5c1cb216a2bf407a9cd3b6adbc59dc6e280990397bb40f21712520d4190b4076e881a79645af01833f
6
+ metadata.gz: f37389220da9e5b2ea7193cf1a3b7fa0198351233d5afa871c66679b06f274b161caab8b13222996345008899a5334a37150708533f3fd295ca266a5d1e35d1f
7
+ data.tar.gz: 2dc168d6bf3d1032fd97dd21f126bfb1028a9b62693b7bc4af254953510f259e96aa7d4c541b23a9a0160c9f5c616b40eebec05b873f0df6fc3d03dc0114f018
data/Cargo.lock CHANGED
@@ -4,31 +4,32 @@ version = 3
4
4
 
5
5
  [[package]]
6
6
  name = "ahash"
7
- version = "0.8.3"
7
+ version = "0.8.7"
8
8
  source = "registry+https://github.com/rust-lang/crates.io-index"
9
- checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f"
9
+ checksum = "77c3a9648d43b9cd48db467b3f87fdd6e146bcc88ab0180006cef2179fe11d01"
10
10
  dependencies = [
11
11
  "cfg-if",
12
12
  "once_cell",
13
13
  "version_check",
14
+ "zerocopy",
14
15
  ]
15
16
 
16
17
  [[package]]
17
18
  name = "aho-corasick"
18
- version = "1.0.2"
19
+ version = "1.1.2"
19
20
  source = "registry+https://github.com/rust-lang/crates.io-index"
20
- checksum = "43f6cb1bf222025340178f382c426f13757b2960e89779dfcb319c32542a5a41"
21
+ checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0"
21
22
  dependencies = [
22
23
  "memchr",
23
24
  ]
24
25
 
25
26
  [[package]]
26
27
  name = "bindgen"
27
- version = "0.62.0"
28
+ version = "0.69.1"
28
29
  source = "registry+https://github.com/rust-lang/crates.io-index"
29
- checksum = "c6720a8b7b2d39dd533285ed438d458f65b31b5c257e6ac7bb3d7e82844dd722"
30
+ checksum = "9ffcebc3849946a7170a05992aac39da343a90676ab392c51a4280981d6379c2"
30
31
  dependencies = [
31
- "bitflags 1.3.2",
32
+ "bitflags 2.4.1",
32
33
  "cexpr",
33
34
  "clang-sys",
34
35
  "lazy_static",
@@ -39,7 +40,7 @@ dependencies = [
39
40
  "regex",
40
41
  "rustc-hash",
41
42
  "shlex",
42
- "syn 1.0.109",
43
+ "syn 2.0.46",
43
44
  ]
44
45
 
45
46
  [[package]]
@@ -50,15 +51,15 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
50
51
 
51
52
  [[package]]
52
53
  name = "bitflags"
53
- version = "2.3.1"
54
+ version = "2.4.1"
54
55
  source = "registry+https://github.com/rust-lang/crates.io-index"
55
- checksum = "6776fc96284a0bb647b615056fc496d1fe1644a7ab01829818a6d91cae888b84"
56
+ checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07"
56
57
 
57
58
  [[package]]
58
59
  name = "byteorder"
59
- version = "1.4.3"
60
+ version = "1.5.0"
60
61
  source = "registry+https://github.com/rust-lang/crates.io-index"
61
- checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
62
+ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
62
63
 
63
64
  [[package]]
64
65
  name = "cexpr"
@@ -77,9 +78,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
77
78
 
78
79
  [[package]]
79
80
  name = "clang-sys"
80
- version = "1.6.1"
81
+ version = "1.7.0"
81
82
  source = "registry+https://github.com/rust-lang/crates.io-index"
82
- checksum = "c688fc74432808e3eb684cae8830a86be1d66a2bd58e1f248ed0960a590baf6f"
83
+ checksum = "67523a3b4be3ce1989d607a828d036249522dd9c1c8de7f4dd2dae43a37369d1"
83
84
  dependencies = [
84
85
  "glob",
85
86
  "libc",
@@ -116,7 +117,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
116
117
  checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331"
117
118
  dependencies = [
118
119
  "quote",
119
- "syn 2.0.18",
120
+ "syn 2.0.46",
120
121
  ]
121
122
 
122
123
  [[package]]
@@ -134,24 +135,24 @@ dependencies = [
134
135
 
135
136
  [[package]]
136
137
  name = "dtoa"
137
- version = "0.4.8"
138
+ version = "1.0.9"
138
139
  source = "registry+https://github.com/rust-lang/crates.io-index"
139
- checksum = "56899898ce76aaf4a0f24d914c97ea6ed976d42fec6ad33fcbb0a1103e07b2b0"
140
+ checksum = "dcbb2bf8e87535c23f7a8a321e364ce21462d0ff10cb6407820e8e96dfff6653"
140
141
 
141
142
  [[package]]
142
143
  name = "dtoa-short"
143
- version = "0.3.3"
144
+ version = "0.3.4"
144
145
  source = "registry+https://github.com/rust-lang/crates.io-index"
145
- checksum = "bde03329ae10e79ede66c9ce4dc930aa8599043b0743008548680f25b91502d6"
146
+ checksum = "dbaceec3c6e4211c79e7b1800fb9680527106beb2f9c51904a3210c03a448c74"
146
147
  dependencies = [
147
148
  "dtoa",
148
149
  ]
149
150
 
150
151
  [[package]]
151
152
  name = "encoding_rs"
152
- version = "0.8.32"
153
+ version = "0.8.33"
153
154
  source = "registry+https://github.com/rust-lang/crates.io-index"
154
- checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394"
155
+ checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1"
155
156
  dependencies = [
156
157
  "cfg-if",
157
158
  ]
@@ -179,7 +180,7 @@ checksum = "eecf8589574ce9b895052fa12d69af7a233f99e6107f5cb8dd1044f2a17bfdcb"
179
180
  dependencies = [
180
181
  "proc-macro2",
181
182
  "quote",
182
- "syn 2.0.18",
183
+ "syn 2.0.46",
183
184
  ]
184
185
 
185
186
  [[package]]
@@ -246,33 +247,33 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
246
247
 
247
248
  [[package]]
248
249
  name = "libc"
249
- version = "0.2.145"
250
+ version = "0.2.151"
250
251
  source = "registry+https://github.com/rust-lang/crates.io-index"
251
- checksum = "fc86cde3ff845662b8f4ef6cb50ea0e20c524eb3d29ae048287e06a1b3fa6a81"
252
+ checksum = "302d7ab3130588088d277783b1e2d2e10c9e9e4a16dd9050e6ec93fb3e7048f4"
252
253
 
253
254
  [[package]]
254
255
  name = "libloading"
255
- version = "0.7.4"
256
+ version = "0.8.1"
256
257
  source = "registry+https://github.com/rust-lang/crates.io-index"
257
- checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f"
258
+ checksum = "c571b676ddfc9a8c12f1f3d3085a7b163966a8fd8098a90640953ce5f6170161"
258
259
  dependencies = [
259
260
  "cfg-if",
260
- "winapi",
261
+ "windows-sys",
261
262
  ]
262
263
 
263
264
  [[package]]
264
265
  name = "log"
265
- version = "0.4.18"
266
+ version = "0.4.20"
266
267
  source = "registry+https://github.com/rust-lang/crates.io-index"
267
- checksum = "518ef76f2f87365916b142844c16d8fefd85039bc5699050210a7778ee1cd1de"
268
+ checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
268
269
 
269
270
  [[package]]
270
271
  name = "lol_html"
271
- version = "1.0.0"
272
+ version = "1.2.0"
272
273
  source = "registry+https://github.com/rust-lang/crates.io-index"
273
- checksum = "ce59b33732efed2480f7d15722ed56905e81004b402196a738f7532ff44d9798"
274
+ checksum = "10662f7aad081ec900fd735be33076da75e0389400277dc3734e2b0aa02bb115"
274
275
  dependencies = [
275
- "bitflags 2.3.1",
276
+ "bitflags 2.4.1",
276
277
  "cfg-if",
277
278
  "cssparser",
278
279
  "encoding_rs",
@@ -288,24 +289,25 @@ dependencies = [
288
289
 
289
290
  [[package]]
290
291
  name = "magnus"
291
- version = "0.5.3"
292
+ version = "0.6.2"
292
293
  source = "registry+https://github.com/rust-lang/crates.io-index"
293
- checksum = "c8dc14463c2552e753ef562961f486ca76f17a857c121db40e9f3ade3f35ab81"
294
+ checksum = "4778544796676e8428e9c622460ebf284bea52d8b10db3aeb449d8b5e61b3a13"
294
295
  dependencies = [
295
296
  "magnus-macros",
296
297
  "rb-sys",
297
298
  "rb-sys-env",
299
+ "seq-macro",
298
300
  ]
299
301
 
300
302
  [[package]]
301
303
  name = "magnus-macros"
302
- version = "0.4.1"
304
+ version = "0.6.0"
303
305
  source = "registry+https://github.com/rust-lang/crates.io-index"
304
- checksum = "6cc17af1d45442c011aa579d727ec6cff8a69aea8a6bbad26736e7112d749bfb"
306
+ checksum = "5968c820e2960565f647819f5928a42d6e874551cab9d88d75e3e0660d7f71e3"
305
307
  dependencies = [
306
308
  "proc-macro2",
307
309
  "quote",
308
- "syn 1.0.109",
310
+ "syn 2.0.46",
309
311
  ]
310
312
 
311
313
  [[package]]
@@ -316,9 +318,9 @@ checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5"
316
318
 
317
319
  [[package]]
318
320
  name = "memchr"
319
- version = "2.5.0"
321
+ version = "2.7.1"
320
322
  source = "registry+https://github.com/rust-lang/crates.io-index"
321
- checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
323
+ checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149"
322
324
 
323
325
  [[package]]
324
326
  name = "mime"
@@ -350,9 +352,9 @@ dependencies = [
350
352
 
351
353
  [[package]]
352
354
  name = "once_cell"
353
- version = "1.18.0"
355
+ version = "1.19.0"
354
356
  source = "registry+https://github.com/rust-lang/crates.io-index"
355
- checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
357
+ checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
356
358
 
357
359
  [[package]]
358
360
  name = "peeking_take_while"
@@ -434,18 +436,18 @@ checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068"
434
436
 
435
437
  [[package]]
436
438
  name = "proc-macro2"
437
- version = "1.0.59"
439
+ version = "1.0.74"
438
440
  source = "registry+https://github.com/rust-lang/crates.io-index"
439
- checksum = "6aeca18b86b413c660b781aa319e4e2648a3e6f9eadc9b47e9038e6fe9f3451b"
441
+ checksum = "2de98502f212cfcea8d0bb305bd0f49d7ebdd75b64ba0a68f937d888f4e0d6db"
440
442
  dependencies = [
441
443
  "unicode-ident",
442
444
  ]
443
445
 
444
446
  [[package]]
445
447
  name = "quote"
446
- version = "1.0.28"
448
+ version = "1.0.35"
447
449
  source = "registry+https://github.com/rust-lang/crates.io-index"
448
- checksum = "1b9ab9c7eadfd8df19006f1cf1a4aed13540ed5cbc047010ece5826e10825488"
450
+ checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef"
449
451
  dependencies = [
450
452
  "proc-macro2",
451
453
  ]
@@ -503,18 +505,18 @@ dependencies = [
503
505
 
504
506
  [[package]]
505
507
  name = "rb-sys"
506
- version = "0.9.78"
508
+ version = "0.9.85"
507
509
  source = "registry+https://github.com/rust-lang/crates.io-index"
508
- checksum = "91447d8cbb45afb5c915bad4dd44bd4b4e9be37648122409ceca75302cb81683"
510
+ checksum = "05b780e6858b0b0eced1d55d0f097c024b77a37b41f83bd35341130f78e37c51"
509
511
  dependencies = [
510
512
  "rb-sys-build",
511
513
  ]
512
514
 
513
515
  [[package]]
514
516
  name = "rb-sys-build"
515
- version = "0.9.78"
517
+ version = "0.9.85"
516
518
  source = "registry+https://github.com/rust-lang/crates.io-index"
517
- checksum = "20673c1cfbd57b2db6c066b796352f07d241c45b210fd15b269dec54fa240380"
519
+ checksum = "44957a3bc513dad1b0f20bdd0ee3b82e729a59da44086a6b40d8bc71958a6db8"
518
520
  dependencies = [
519
521
  "bindgen",
520
522
  "lazy_static",
@@ -522,7 +524,7 @@ dependencies = [
522
524
  "quote",
523
525
  "regex",
524
526
  "shell-words",
525
- "syn 1.0.109",
527
+ "syn 2.0.46",
526
528
  ]
527
529
 
528
530
  [[package]]
@@ -533,9 +535,21 @@ checksum = "a35802679f07360454b418a5d1735c89716bde01d35b1560fc953c1415a0b3bb"
533
535
 
534
536
  [[package]]
535
537
  name = "regex"
536
- version = "1.8.3"
538
+ version = "1.10.2"
537
539
  source = "registry+https://github.com/rust-lang/crates.io-index"
538
- checksum = "81ca098a9821bd52d6b24fd8b10bd081f47d39c22778cafaa75a2857a62c6390"
540
+ checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343"
541
+ dependencies = [
542
+ "aho-corasick",
543
+ "memchr",
544
+ "regex-automata",
545
+ "regex-syntax",
546
+ ]
547
+
548
+ [[package]]
549
+ name = "regex-automata"
550
+ version = "0.4.3"
551
+ source = "registry+https://github.com/rust-lang/crates.io-index"
552
+ checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f"
539
553
  dependencies = [
540
554
  "aho-corasick",
541
555
  "memchr",
@@ -544,9 +558,9 @@ dependencies = [
544
558
 
545
559
  [[package]]
546
560
  name = "regex-syntax"
547
- version = "0.7.2"
561
+ version = "0.8.2"
548
562
  source = "registry+https://github.com/rust-lang/crates.io-index"
549
- checksum = "436b050e76ed2903236f032a59761c1eb99e1b0aead2c257922771dab1fc8c78"
563
+ checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f"
550
564
 
551
565
  [[package]]
552
566
  name = "rustc-hash"
@@ -601,9 +615,15 @@ dependencies = [
601
615
 
602
616
  [[package]]
603
617
  name = "semver"
604
- version = "1.0.17"
618
+ version = "1.0.21"
605
619
  source = "registry+https://github.com/rust-lang/crates.io-index"
606
- checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed"
620
+ checksum = "b97ed7a9823b74f99c7742f5336af7be5ecd3eeafcb1507d1fa93347b1d589b0"
621
+
622
+ [[package]]
623
+ name = "seq-macro"
624
+ version = "0.3.5"
625
+ source = "registry+https://github.com/rust-lang/crates.io-index"
626
+ checksum = "a3f0bf26fd526d2a95683cd0f87bf103b8539e2ca1ef48ce002d67aad59aa0b4"
607
627
 
608
628
  [[package]]
609
629
  name = "servo_arc"
@@ -623,21 +643,21 @@ checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde"
623
643
 
624
644
  [[package]]
625
645
  name = "shlex"
626
- version = "1.1.0"
646
+ version = "1.2.0"
627
647
  source = "registry+https://github.com/rust-lang/crates.io-index"
628
- checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3"
648
+ checksum = "a7cee0529a6d40f580e7a5e6c495c8fbfe21b7b52795ed4bb5e62cdf92bc6380"
629
649
 
630
650
  [[package]]
631
651
  name = "siphasher"
632
- version = "0.3.10"
652
+ version = "0.3.11"
633
653
  source = "registry+https://github.com/rust-lang/crates.io-index"
634
- checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de"
654
+ checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d"
635
655
 
636
656
  [[package]]
637
657
  name = "smallvec"
638
- version = "1.10.0"
658
+ version = "1.11.2"
639
659
  source = "registry+https://github.com/rust-lang/crates.io-index"
640
- checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0"
660
+ checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970"
641
661
 
642
662
  [[package]]
643
663
  name = "stable_deref_trait"
@@ -658,9 +678,9 @@ dependencies = [
658
678
 
659
679
  [[package]]
660
680
  name = "syn"
661
- version = "2.0.18"
681
+ version = "2.0.46"
662
682
  source = "registry+https://github.com/rust-lang/crates.io-index"
663
- checksum = "32d41677bcbe24c20c52e7c70b0d8db04134c5d1066bf98662e2871ad200ea3e"
683
+ checksum = "89456b690ff72fddcecf231caedbe615c59480c93358a93dfae7fc29e3ebbf0e"
664
684
  dependencies = [
665
685
  "proc-macro2",
666
686
  "quote",
@@ -675,29 +695,29 @@ checksum = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c"
675
695
 
676
696
  [[package]]
677
697
  name = "thiserror"
678
- version = "1.0.40"
698
+ version = "1.0.56"
679
699
  source = "registry+https://github.com/rust-lang/crates.io-index"
680
- checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac"
700
+ checksum = "d54378c645627613241d077a3a79db965db602882668f9136ac42af9ecb730ad"
681
701
  dependencies = [
682
702
  "thiserror-impl",
683
703
  ]
684
704
 
685
705
  [[package]]
686
706
  name = "thiserror-impl"
687
- version = "1.0.40"
707
+ version = "1.0.56"
688
708
  source = "registry+https://github.com/rust-lang/crates.io-index"
689
- checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f"
709
+ checksum = "fa0faa943b50f3db30a20aa7e265dbc66076993efed8463e8de414e5d06d3471"
690
710
  dependencies = [
691
711
  "proc-macro2",
692
712
  "quote",
693
- "syn 2.0.18",
713
+ "syn 2.0.46",
694
714
  ]
695
715
 
696
716
  [[package]]
697
717
  name = "unicode-ident"
698
- version = "1.0.9"
718
+ version = "1.0.12"
699
719
  source = "registry+https://github.com/rust-lang/crates.io-index"
700
- checksum = "b15811caf2415fb889178633e7724bad2509101cde276048e013b9def5e51fa0"
720
+ checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
701
721
 
702
722
  [[package]]
703
723
  name = "version_check"
@@ -712,23 +732,87 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
712
732
  checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
713
733
 
714
734
  [[package]]
715
- name = "winapi"
716
- version = "0.3.9"
735
+ name = "windows-sys"
736
+ version = "0.48.0"
717
737
  source = "registry+https://github.com/rust-lang/crates.io-index"
718
- checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
738
+ checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
719
739
  dependencies = [
720
- "winapi-i686-pc-windows-gnu",
721
- "winapi-x86_64-pc-windows-gnu",
740
+ "windows-targets",
722
741
  ]
723
742
 
724
743
  [[package]]
725
- name = "winapi-i686-pc-windows-gnu"
726
- version = "0.4.0"
744
+ name = "windows-targets"
745
+ version = "0.48.5"
727
746
  source = "registry+https://github.com/rust-lang/crates.io-index"
728
- checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
747
+ checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
748
+ dependencies = [
749
+ "windows_aarch64_gnullvm",
750
+ "windows_aarch64_msvc",
751
+ "windows_i686_gnu",
752
+ "windows_i686_msvc",
753
+ "windows_x86_64_gnu",
754
+ "windows_x86_64_gnullvm",
755
+ "windows_x86_64_msvc",
756
+ ]
729
757
 
730
758
  [[package]]
731
- name = "winapi-x86_64-pc-windows-gnu"
732
- version = "0.4.0"
759
+ name = "windows_aarch64_gnullvm"
760
+ version = "0.48.5"
761
+ source = "registry+https://github.com/rust-lang/crates.io-index"
762
+ checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
763
+
764
+ [[package]]
765
+ name = "windows_aarch64_msvc"
766
+ version = "0.48.5"
767
+ source = "registry+https://github.com/rust-lang/crates.io-index"
768
+ checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
769
+
770
+ [[package]]
771
+ name = "windows_i686_gnu"
772
+ version = "0.48.5"
773
+ source = "registry+https://github.com/rust-lang/crates.io-index"
774
+ checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
775
+
776
+ [[package]]
777
+ name = "windows_i686_msvc"
778
+ version = "0.48.5"
733
779
  source = "registry+https://github.com/rust-lang/crates.io-index"
734
- checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
780
+ checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
781
+
782
+ [[package]]
783
+ name = "windows_x86_64_gnu"
784
+ version = "0.48.5"
785
+ source = "registry+https://github.com/rust-lang/crates.io-index"
786
+ checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
787
+
788
+ [[package]]
789
+ name = "windows_x86_64_gnullvm"
790
+ version = "0.48.5"
791
+ source = "registry+https://github.com/rust-lang/crates.io-index"
792
+ checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
793
+
794
+ [[package]]
795
+ name = "windows_x86_64_msvc"
796
+ version = "0.48.5"
797
+ source = "registry+https://github.com/rust-lang/crates.io-index"
798
+ checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
799
+
800
+ [[package]]
801
+ name = "zerocopy"
802
+ version = "0.7.32"
803
+ source = "registry+https://github.com/rust-lang/crates.io-index"
804
+ checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be"
805
+ dependencies = [
806
+ "zerocopy-derive",
807
+ ]
808
+
809
+ [[package]]
810
+ name = "zerocopy-derive"
811
+ version = "0.7.32"
812
+ source = "registry+https://github.com/rust-lang/crates.io-index"
813
+ checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6"
814
+ dependencies = [
815
+ "proc-macro2",
816
+ "quote",
817
+ "syn 2.0.46",
818
+ ]
data/Cargo.toml CHANGED
@@ -4,3 +4,5 @@
4
4
 
5
5
  [workspace]
6
6
  members = ["ext/selma"]
7
+ resolver = "2"
8
+
data/README.md CHANGED
@@ -164,6 +164,9 @@ The `element` argument in `handle_element` has the following methods:
164
164
  - `prepend(content, as: content_type)`: prepends `content` to the element's inner content, i.e. inserts content right after the element's start tag. `content_type` is either `:text` or `:html` and determines how the content will be applied.
165
165
  - `append(content, as: content_type)`: appends `content` to the element's inner content, i.e. inserts content right before the element's end tag. `content_type` is either `:text` or `:html` and determines how the content will be applied.
166
166
  - `set_inner_content`: Replaces inner content of the element with `content`. `content_type` is either `:text` or `:html` and determines how the content will be applied.
167
+ - `remove`: Removes the element and its inner content.
168
+ - `remove_and_keep_content`: Removes the element, but keeps its content. I.e. remove start and end tags of the element.
169
+ - `removed?`: A bool which identifies if the element has been removed or replaced with some content.
167
170
 
168
171
  #### `text_chunk` methods
169
172
 
data/ext/selma/Cargo.toml CHANGED
@@ -2,12 +2,14 @@
2
2
  name = "selma"
3
3
  version = "1.0.0"
4
4
  edition = "2021"
5
+ rust-version = "1.75.0"
6
+ publish = false
5
7
 
6
8
  [dependencies]
7
9
  enum-iterator = "1.4"
8
10
  escapist = "0.0.2"
9
- magnus = "0.5"
10
- lol_html = "1.0"
11
+ magnus = "0.6"
12
+ lol_html = "1.2"
11
13
 
12
14
  [lib]
13
15
  name = "selma"
@@ -215,12 +215,41 @@ impl SelmaHTMLElement {
215
215
 
216
216
  Ok(())
217
217
  }
218
+
219
+ fn remove(&self) {
220
+ let mut binding = self.0.borrow_mut();
221
+
222
+ if let Ok(e) = binding.element.get_mut() {
223
+ e.remove()
224
+ }
225
+ }
226
+
227
+ fn remove_and_keep_content(&self) {
228
+ let mut binding = self.0.borrow_mut();
229
+
230
+ if let Ok(e) = binding.element.get_mut() {
231
+ e.remove_and_keep_content()
232
+ }
233
+ }
234
+
235
+ fn is_removed(&self) -> Result<bool, Error> {
236
+ let binding = self.0.borrow();
237
+
238
+ if let Ok(e) = binding.element.get() {
239
+ Ok(e.removed())
240
+ } else {
241
+ Err(Error::new(
242
+ exception::runtime_error(),
243
+ "`is_removed` is not available",
244
+ ))
245
+ }
246
+ }
218
247
  }
219
248
 
220
249
  pub fn init(c_html: RClass) -> Result<(), Error> {
221
250
  let c_element = c_html
222
- .define_class("Element", Default::default())
223
- .expect("cannot find class Selma::HTML::Element");
251
+ .define_class("Element", magnus::class::object())
252
+ .expect("cannot define class Selma::HTML::Element");
224
253
 
225
254
  c_element.define_method("tag_name", method!(SelmaHTMLElement::tag_name, 0))?;
226
255
  c_element.define_method("tag_name=", method!(SelmaHTMLElement::set_tag_name, 1))?;
@@ -250,5 +279,12 @@ pub fn init(c_html: RClass) -> Result<(), Error> {
250
279
  method!(SelmaHTMLElement::set_inner_content, -1),
251
280
  )?;
252
281
 
282
+ c_element.define_method("remove", method!(SelmaHTMLElement::remove, 0))?;
283
+ c_element.define_method(
284
+ "remove_and_keep_content",
285
+ method!(SelmaHTMLElement::remove_and_keep_content, 0),
286
+ )?;
287
+ c_element.define_method("removed?", method!(SelmaHTMLElement::is_removed, 0))?;
288
+
253
289
  Ok(())
254
290
  }
@@ -26,8 +26,8 @@ impl SelmaHTMLEndTag {
26
26
 
27
27
  pub fn init(c_html: RClass) -> Result<(), Error> {
28
28
  let c_end_tag = c_html
29
- .define_class("EndTag", Default::default())
30
- .expect("cannot find class Selma::HTML::EndTag");
29
+ .define_class("EndTag", magnus::class::object())
30
+ .expect("cannot define class Selma::HTML::EndTag");
31
31
 
32
32
  c_end_tag.define_method("tag_name", method!(SelmaHTMLEndTag::tag_name, 0))?;
33
33
 
@@ -99,8 +99,8 @@ impl SelmaHTMLTextChunk {
99
99
 
100
100
  pub fn init(c_html: RClass) -> Result<(), Error> {
101
101
  let c_text_chunk = c_html
102
- .define_class("TextChunk", Default::default())
103
- .expect("cannot find class Selma::HTML::TextChunk");
102
+ .define_class("TextChunk", magnus::class::object())
103
+ .expect("cannot define class Selma::HTML::TextChunk");
104
104
 
105
105
  c_text_chunk.define_method("to_s", method!(SelmaHTMLTextChunk::to_s, 0))?;
106
106
  c_text_chunk.define_method("content", method!(SelmaHTMLTextChunk::to_s, 0))?;
@@ -5,7 +5,9 @@ use magnus::{Error, Module, RModule};
5
5
  pub(crate) struct SelmaHTML {}
6
6
 
7
7
  pub fn init(m_selma: RModule) -> Result<(), Error> {
8
- let c_html = m_selma.define_class("HTML", Default::default()).unwrap();
8
+ let c_html = m_selma
9
+ .define_class("HTML", magnus::class::object())
10
+ .expect("cannot define class Selma::HTML");
9
11
 
10
12
  element::init(c_html).expect("cannot define Selma::HTML::Element class");
11
13
  end_tag::init(c_html).expect("cannot define Selma::HTML::EndTag class");
data/ext/selma/src/lib.rs CHANGED
@@ -9,7 +9,6 @@ pub mod rewriter;
9
9
  pub mod sanitizer;
10
10
  pub mod selector;
11
11
  pub mod tags;
12
- pub mod wrapped_struct;
13
12
 
14
13
  #[allow(clippy::let_unit_value)]
15
14
  fn scan_text_args(args: &[Value]) -> Result<(String, ContentType), magnus::Error> {
@@ -3,7 +3,12 @@ use lol_html::{
3
3
  html_content::{Element, TextChunk},
4
4
  text, DocumentContentHandlers, ElementContentHandlers, HtmlRewriter, Selector, Settings,
5
5
  };
6
- use magnus::{exception, function, method, scan_args, Module, Object, RArray, RModule, Value};
6
+ use magnus::{
7
+ exception, function, method, scan_args,
8
+ typed_data::Obj,
9
+ value::{Opaque, ReprValue},
10
+ Module, Object, RArray, RModule, Ruby, Value,
11
+ };
7
12
 
8
13
  use std::{borrow::Cow, cell::RefCell, primitive::str, rc::Rc};
9
14
 
@@ -12,35 +17,34 @@ use crate::{
12
17
  sanitizer::SelmaSanitizer,
13
18
  selector::SelmaSelector,
14
19
  tags::Tag,
15
- wrapped_struct::WrappedStruct,
16
20
  };
17
21
 
18
- #[derive(Clone, Debug)]
22
+ #[derive(Clone)]
19
23
  pub struct Handler {
20
- rb_handler: Value,
21
- rb_selector: WrappedStruct<SelmaSelector>,
22
-
23
- total_element_handler_calls: usize,
24
- total_elapsed_element_handlers: f64,
24
+ rb_handler: Opaque<Value>,
25
+ rb_selector: Opaque<Obj<SelmaSelector>>,
26
+ // total_element_handler_calls: usize,
27
+ // total_elapsed_element_handlers: f64,
25
28
 
26
- total_text_handler_calls: usize,
27
- total_elapsed_text_handlers: f64,
29
+ // total_text_handler_calls: usize,
30
+ // total_elapsed_text_handlers: f64,
28
31
  }
29
32
 
30
33
  pub struct Rewriter {
31
34
  sanitizer: Option<SelmaSanitizer>,
32
35
  handlers: Vec<Handler>,
33
-
34
- total_elapsed: f64,
36
+ // total_elapsed: f64,
35
37
  }
36
38
 
37
39
  #[magnus::wrap(class = "Selma::Rewriter")]
38
40
  pub struct SelmaRewriter(std::cell::RefCell<Rewriter>);
39
41
 
42
+ type RewriterValues = (Option<Option<Obj<SelmaSanitizer>>>, Option<RArray>);
43
+
40
44
  impl SelmaRewriter {
41
- const SELMA_ON_END_TAG: &str = "on_end_tag";
42
- const SELMA_HANDLE_ELEMENT: &str = "handle_element";
43
- const SELMA_HANDLE_TEXT_CHUNK: &str = "handle_text_chunk";
45
+ const SELMA_ON_END_TAG: &'static str = "on_end_tag";
46
+ const SELMA_HANDLE_ELEMENT: &'static str = "handle_element";
47
+ const SELMA_HANDLE_TEXT_CHUNK: &'static str = "handle_text_chunk";
44
48
 
45
49
  /// @yard
46
50
  /// @def new(sanitizer: Selma::Sanitizer.new(Selma::Sanitizer::Config::DEFAULT), handlers: [])
@@ -52,16 +56,17 @@ impl SelmaRewriter {
52
56
 
53
57
  let sanitizer = match rb_sanitizer {
54
58
  None => {
59
+ // no `sanitizer:` provided, use default
55
60
  let default_sanitizer = SelmaSanitizer::new(&[])?;
56
- let wrapped_sanitizer = WrappedStruct::from(default_sanitizer);
61
+ let wrapped_sanitizer = Obj::wrap(default_sanitizer);
57
62
  wrapped_sanitizer.funcall::<&str, (), Value>("setup", ())?;
58
- Some(wrapped_sanitizer.get().unwrap().to_owned())
63
+ Some(wrapped_sanitizer.get().to_owned())
59
64
  }
60
65
  Some(sanitizer_value) => match sanitizer_value {
61
- None => None,
66
+ None => None, // no `sanitizer:` provided, use default
62
67
  Some(sanitizer) => {
63
68
  sanitizer.funcall::<&str, (), Value>("setup", ())?;
64
- Some(sanitizer.get().unwrap().to_owned())
69
+ Some(sanitizer.get().to_owned())
65
70
  }
66
71
  },
67
72
  };
@@ -86,24 +91,23 @@ impl SelmaRewriter {
86
91
  ));
87
92
  }
88
93
 
89
- let rb_selector: WrappedStruct<SelmaSelector> =
90
- match rb_handler.funcall("selector", ()) {
91
- Err(err) => {
92
- return Err(magnus::Error::new(
93
- exception::type_error(),
94
- format!("Error instantiating selector: {err:?}"),
95
- ));
96
- }
97
- Ok(rb_selector) => rb_selector,
98
- };
94
+ let rb_selector: Obj<SelmaSelector> = match rb_handler.funcall("selector", ()) {
95
+ Err(err) => {
96
+ return Err(magnus::Error::new(
97
+ exception::type_error(),
98
+ format!("Error instantiating selector: {err:?}"),
99
+ ));
100
+ }
101
+ Ok(rb_selector) => rb_selector,
102
+ };
99
103
  let handler = Handler {
100
- rb_handler,
101
- rb_selector,
102
- total_element_handler_calls: 0,
103
- total_elapsed_element_handlers: 0.0,
104
+ rb_handler: Opaque::from(rb_handler),
105
+ rb_selector: Opaque::from(rb_selector),
106
+ // total_element_handler_calls: 0,
107
+ // total_elapsed_element_handlers: 0.0,
104
108
 
105
- total_text_handler_calls: 0,
106
- total_elapsed_text_handlers: 0.0,
109
+ // total_text_handler_calls: 0,
110
+ // total_elapsed_text_handlers: 0.0,
107
111
  };
108
112
  handlers.push(handler);
109
113
  }
@@ -121,20 +125,12 @@ impl SelmaRewriter {
121
125
  Ok(Self(std::cell::RefCell::new(Rewriter {
122
126
  sanitizer,
123
127
  handlers,
124
- total_elapsed: 0.0,
128
+ // total_elapsed: 0.0,
125
129
  })))
126
130
  }
127
131
 
128
132
  #[allow(clippy::let_unit_value)]
129
- fn scan_parse_args(
130
- args: &[Value],
131
- ) -> Result<
132
- (
133
- Option<Option<WrappedStruct<SelmaSanitizer>>>,
134
- Option<RArray>,
135
- ),
136
- magnus::Error,
137
- > {
133
+ fn scan_parse_args(args: &[Value]) -> Result<RewriterValues, magnus::Error> {
138
134
  let args = scan_args::scan_args(args)?;
139
135
  let _: () = args.required;
140
136
  let _: () = args.optional;
@@ -145,10 +141,7 @@ impl SelmaRewriter {
145
141
  let kwargs = scan_args::get_kwargs::<
146
142
  _,
147
143
  (),
148
- (
149
- Option<Option<WrappedStruct<SelmaSanitizer>>>,
150
- Option<RArray>,
151
- ),
144
+ (Option<Option<Obj<SelmaSanitizer>>>, Option<RArray>),
152
145
  (),
153
146
  >(args.keywords, &[], &["sanitizer", "handlers"])?;
154
147
  let (rb_sanitizer, rb_handlers) = kwargs.optional;
@@ -270,7 +263,9 @@ impl SelmaRewriter {
270
263
  handlers.iter().for_each(|handler| {
271
264
  let element_stack: Rc<RefCell<Vec<String>>> = Rc::new(RefCell::new(vec![]));
272
265
 
273
- let selector = handler.rb_selector.get_static().unwrap();
266
+ let ruby = Ruby::get().unwrap();
267
+
268
+ let selector = ruby.get_inner(handler.rb_selector);
274
269
 
275
270
  // TODO: test final raise by simulating errors
276
271
  if selector.match_element().is_some() {
@@ -280,7 +275,7 @@ impl SelmaRewriter {
280
275
  selector.match_element().unwrap(),
281
276
  move |el| {
282
277
  match Self::process_element_handlers(
283
- handler.rb_handler,
278
+ ruby.get_inner(handler.rb_handler),
284
279
  el,
285
280
  &closure_element_stack.borrow(),
286
281
  ) {
@@ -311,7 +306,9 @@ impl SelmaRewriter {
311
306
  }
312
307
  }
313
308
 
314
- match Self::process_text_handlers(handler.rb_handler, text) {
309
+ let ruby = Ruby::get().unwrap();
310
+ match Self::process_text_handlers(ruby.get_inner(handler.rb_handler), text)
311
+ {
315
312
  Ok(_) => Ok(()),
316
313
  Err(err) => Err(err.to_string().into()),
317
314
  }
@@ -421,8 +418,8 @@ impl SelmaRewriter {
421
418
 
422
419
  pub fn init(m_selma: RModule) -> Result<(), magnus::Error> {
423
420
  let c_rewriter = m_selma
424
- .define_class("Rewriter", Default::default())
425
- .expect("cannot find class Selma::Rewriter");
421
+ .define_class("Rewriter", magnus::class::object())
422
+ .expect("cannot define class Selma::Rewriter");
426
423
 
427
424
  c_rewriter.define_singleton_method("new", function!(SelmaRewriter::new, -1))?;
428
425
  c_rewriter
@@ -4,9 +4,13 @@ use lol_html::{
4
4
  errors::AttributeNameError,
5
5
  html_content::{Comment, ContentType, Doctype, Element, EndTag},
6
6
  };
7
- use magnus::{class, function, method, scan_args, Module, Object, RArray, RHash, RModule, Value};
7
+ use magnus::{
8
+ class, function, method, scan_args,
9
+ value::{Opaque, ReprValue},
10
+ Module, Object, RArray, RHash, RModule, Ruby, Value,
11
+ };
8
12
 
9
- #[derive(Clone, Debug)]
13
+ #[derive(Clone, Debug, Default)]
10
14
  struct ElementSanitizer {
11
15
  allowed_attrs: Vec<String>,
12
16
  required_attrs: Vec<String>,
@@ -14,19 +18,7 @@ struct ElementSanitizer {
14
18
  protocol_sanitizers: HashMap<String, Vec<String>>,
15
19
  }
16
20
 
17
- impl Default for ElementSanitizer {
18
- fn default() -> Self {
19
- ElementSanitizer {
20
- allowed_attrs: vec![],
21
- allowed_classes: vec![],
22
- required_attrs: vec![],
23
-
24
- protocol_sanitizers: HashMap::new(),
25
- }
26
- }
27
- }
28
-
29
- #[derive(Clone, Debug)]
21
+ #[derive(Clone)]
30
22
  pub struct Sanitizer {
31
23
  flags: [u8; crate::tags::Tag::TAG_COUNT],
32
24
  allowed_attrs: Vec<String>,
@@ -36,10 +28,10 @@ pub struct Sanitizer {
36
28
  pub escape_tagfilter: bool,
37
29
  pub allow_comments: bool,
38
30
  pub allow_doctype: bool,
39
- config: RHash,
31
+ config: Opaque<RHash>,
40
32
  }
41
33
 
42
- #[derive(Clone, Debug)]
34
+ #[derive(Clone)]
43
35
  #[magnus::wrap(class = "Selma::Sanitizer")]
44
36
  pub struct SelmaSanitizer(std::cell::RefCell<Sanitizer>);
45
37
 
@@ -77,14 +69,15 @@ impl SelmaSanitizer {
77
69
  escape_tagfilter: true,
78
70
  allow_comments: false,
79
71
  allow_doctype: true,
80
- config,
72
+ config: config.into(),
81
73
  })))
82
74
  }
83
75
 
84
76
  fn get_config(&self) -> Result<RHash, magnus::Error> {
85
77
  let binding = self.0.borrow();
78
+ let ruby = Ruby::get().unwrap();
86
79
 
87
- Ok(binding.config)
80
+ Ok(ruby.get_inner(binding.config))
88
81
  }
89
82
 
90
83
  /// Toggle a sanitizer option on or off.
@@ -308,9 +301,9 @@ impl SelmaSanitizer {
308
301
  let mut buf = String::new();
309
302
  // ...then, escape any special characters, for security
310
303
  if attr_name == "href" {
311
- escapist::escape_href(&mut buf, unescaped_attr_val.as_str());
304
+ escapist::escape_href(&mut buf, unescaped_attr_val.as_str()).unwrap();
312
305
  } else {
313
- escapist::escape_html(&mut buf, unescaped_attr_val.as_str());
306
+ escapist::escape_html(&mut buf, unescaped_attr_val.as_str()).unwrap();
314
307
  };
315
308
 
316
309
  match element.set_attribute(attr_name, &buf) {
@@ -554,7 +547,9 @@ impl SelmaSanitizer {
554
547
  }
555
548
 
556
549
  pub fn init(m_selma: RModule) -> Result<(), magnus::Error> {
557
- let c_sanitizer = m_selma.define_class("Sanitizer", Default::default())?;
550
+ let c_sanitizer = m_selma
551
+ .define_class("Sanitizer", magnus::class::object())
552
+ .expect("cannot define class Selma::Sanitizer");
558
553
 
559
554
  c_sanitizer.define_singleton_method("new", function!(SelmaSanitizer::new, -1))?;
560
555
  c_sanitizer.define_method("config", method!(SelmaSanitizer::get_config, 0))?;
@@ -8,6 +8,8 @@ pub struct SelmaSelector {
8
8
  ignore_text_within: Option<Vec<String>>,
9
9
  }
10
10
 
11
+ type SelectorMatches = (Option<String>, Option<String>, Option<Vec<String>>);
12
+
11
13
  impl SelmaSelector {
12
14
  fn new(args: &[Value]) -> Result<Self, Error> {
13
15
  let (match_element, match_text_within, rb_ignore_text_within) =
@@ -63,9 +65,7 @@ impl SelmaSelector {
63
65
  }
64
66
 
65
67
  #[allow(clippy::let_unit_value)]
66
- fn scan_parse_args(
67
- args: &[Value],
68
- ) -> Result<(Option<String>, Option<String>, Option<Vec<String>>), Error> {
68
+ fn scan_parse_args(args: &[Value]) -> Result<SelectorMatches, Error> {
69
69
  let args = scan_args::scan_args(args)?;
70
70
  let _: () = args.required;
71
71
  let _: () = args.optional;
@@ -103,7 +103,7 @@ impl SelmaSelector {
103
103
 
104
104
  pub fn init(m_selma: RModule) -> Result<(), Error> {
105
105
  let c_selector = m_selma
106
- .define_class("Selector", Default::default())
106
+ .define_class("Selector", magnus::class::object())
107
107
  .expect("cannot define class Selma::Selector");
108
108
 
109
109
  c_selector.define_singleton_method("new", function!(SelmaSelector::new, -1))?;
@@ -205,7 +205,7 @@ impl Tag {
205
205
  || tag.index == HTMLTag::XMP as usize
206
206
  }
207
207
 
208
- pub const ESCAPEWORTHY_TAGS_CSS: &str =
208
+ pub const ESCAPEWORTHY_TAGS_CSS: &'static str =
209
209
  "title, textarea, style, xmp, iframe, noembed, noframes, script, plaintext";
210
210
 
211
211
  pub fn html_tags() -> Vec<HTMLTag> {
data/lib/selma/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Selma
4
- VERSION = "0.1.6"
4
+ VERSION = "0.2.2"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: selma
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Garen J. Torikian
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-06-05 00:00:00.000000000 Z
11
+ date: 2024-01-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rb_sys
@@ -52,7 +52,7 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '1.2'
55
- description:
55
+ description:
56
56
  email:
57
57
  - gjtorikian@gmail.com
58
58
  executables: []
@@ -76,7 +76,6 @@ files:
76
76
  - ext/selma/src/sanitizer.rs
77
77
  - ext/selma/src/selector.rs
78
78
  - ext/selma/src/tags.rs
79
- - ext/selma/src/wrapped_struct.rs
80
79
  - lib/selma.rb
81
80
  - lib/selma/extension.rb
82
81
  - lib/selma/html.rb
@@ -89,7 +88,7 @@ files:
89
88
  - lib/selma/sanitizer/config/restricted.rb
90
89
  - lib/selma/selector.rb
91
90
  - lib/selma/version.rb
92
- homepage:
91
+ homepage:
93
92
  licenses:
94
93
  - MIT
95
94
  metadata:
@@ -97,7 +96,7 @@ metadata:
97
96
  funding_uri: https://github.com/sponsors/gjtorikian/
98
97
  source_code_uri: https://github.com/gjtorikian/selma
99
98
  rubygems_mfa_required: 'true'
100
- post_install_message:
99
+ post_install_message:
101
100
  rdoc_options: []
102
101
  require_paths:
103
102
  - lib
@@ -112,8 +111,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
112
111
  - !ruby/object:Gem::Version
113
112
  version: 3.3.22
114
113
  requirements: []
115
- rubygems_version: 3.4.13
116
- signing_key:
114
+ rubygems_version: 3.5.3
115
+ signing_key:
117
116
  specification_version: 4
118
117
  summary: Selma selects and matches HTML nodes using CSS rules. Backed by Rust's lol_html
119
118
  parser.
@@ -1,92 +0,0 @@
1
- use magnus::{error::Error, exception, gc, value::Value, RTypedData, TryConvert, TypedData};
2
- use std::{marker::PhantomData, ops::Deref};
3
-
4
- // NOTE: My Rust isn't good enough to know what any of this does,
5
- // but it was taken from https://cs.github.com/bytecodealliance/wasmtime-rb/blob/a843e4b4582a945f2c881b8bd3e2b87688ab5509/ext/src/helpers/wrapped_struct.rs#L4
6
-
7
- /// A small wrapper for `RTypedData` that keeps track of the concrete struct
8
- /// type, and the underlying [`Value`] for GC purposes.
9
- #[derive(Debug)]
10
- #[repr(transparent)]
11
- pub struct WrappedStruct<T: TypedData> {
12
- inner: RTypedData,
13
- phantom: PhantomData<T>,
14
- }
15
-
16
- impl<T: TypedData> Clone for WrappedStruct<T> {
17
- fn clone(&self) -> Self {
18
- Self {
19
- inner: self.inner,
20
- phantom: PhantomData,
21
- }
22
- }
23
- }
24
- impl<T: TypedData> Copy for WrappedStruct<T> {}
25
-
26
- impl<T: TypedData> WrappedStruct<T> {
27
- /// Gets the underlying struct.
28
- pub fn get(&self) -> Result<&T, Error> {
29
- self.inner.try_convert()
30
- }
31
-
32
- /// Gets the underlying struct with a `'static` lifetime.
33
- pub fn get_static(&self) -> Result<&'static T, Error> {
34
- self.inner.try_convert()
35
- }
36
-
37
- /// Get the Ruby [`Value`] for this struct.
38
- pub fn to_value(self) -> Value {
39
- self.inner.into()
40
- }
41
-
42
- /// Marks the Ruby [`Value`] for GC.
43
- pub fn mark(&self) {
44
- gc::mark(&self.inner.into());
45
- }
46
- }
47
-
48
- impl<T: TypedData> From<WrappedStruct<T>> for Value {
49
- fn from(wrapped_struct: WrappedStruct<T>) -> Self {
50
- wrapped_struct.to_value()
51
- }
52
- }
53
-
54
- impl<T: TypedData> Deref for WrappedStruct<T> {
55
- type Target = RTypedData;
56
-
57
- fn deref(&self) -> &Self::Target {
58
- &self.inner
59
- }
60
- }
61
-
62
- impl<T: TypedData> From<T> for WrappedStruct<T> {
63
- fn from(t: T) -> Self {
64
- Self {
65
- inner: RTypedData::wrap(t),
66
- phantom: PhantomData,
67
- }
68
- }
69
- }
70
-
71
- impl<T> TryConvert for WrappedStruct<T>
72
- where
73
- T: TypedData,
74
- {
75
- fn try_convert(val: Value) -> Result<Self, Error> {
76
- let inner = RTypedData::from_value(val).ok_or_else(|| {
77
- Error::new(
78
- exception::type_error(),
79
- format!(
80
- "no implicit conversion of {} into {}",
81
- unsafe { val.classname() },
82
- T::class()
83
- ),
84
- )
85
- })?;
86
-
87
- Ok(Self {
88
- inner,
89
- phantom: PhantomData,
90
- })
91
- }
92
- }