itsi-scheduler 0.1.0 → 0.1.3

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 (49) hide show
  1. checksums.yaml +4 -4
  2. data/Cargo.lock +219 -23
  3. data/Rakefile +7 -1
  4. data/ext/itsi_error/Cargo.toml +2 -0
  5. data/ext/itsi_error/src/from.rs +70 -0
  6. data/ext/itsi_error/src/lib.rs +10 -37
  7. data/ext/itsi_instrument_entry/Cargo.toml +15 -0
  8. data/ext/itsi_instrument_entry/src/lib.rs +31 -0
  9. data/ext/itsi_rb_helpers/Cargo.toml +2 -0
  10. data/ext/itsi_rb_helpers/src/heap_value.rs +121 -0
  11. data/ext/itsi_rb_helpers/src/lib.rs +90 -10
  12. data/ext/itsi_scheduler/Cargo.toml +9 -1
  13. data/ext/itsi_scheduler/extconf.rb +1 -1
  14. data/ext/itsi_scheduler/src/itsi_scheduler/io_helpers.rs +56 -0
  15. data/ext/itsi_scheduler/src/itsi_scheduler/io_waiter.rs +44 -0
  16. data/ext/itsi_scheduler/src/itsi_scheduler/timer.rs +44 -0
  17. data/ext/itsi_scheduler/src/itsi_scheduler.rs +308 -0
  18. data/ext/itsi_scheduler/src/lib.rs +31 -10
  19. data/ext/itsi_server/Cargo.toml +41 -0
  20. data/ext/itsi_server/extconf.rb +6 -0
  21. data/ext/itsi_server/src/body_proxy/big_bytes.rs +104 -0
  22. data/ext/itsi_server/src/body_proxy/itsi_body_proxy.rs +122 -0
  23. data/ext/itsi_server/src/body_proxy/mod.rs +2 -0
  24. data/ext/itsi_server/src/lib.rs +103 -0
  25. data/ext/itsi_server/src/request/itsi_request.rs +277 -0
  26. data/ext/itsi_server/src/request/mod.rs +1 -0
  27. data/ext/itsi_server/src/response/itsi_response.rs +347 -0
  28. data/ext/itsi_server/src/response/mod.rs +1 -0
  29. data/ext/itsi_server/src/server/bind.rs +168 -0
  30. data/ext/itsi_server/src/server/bind_protocol.rs +37 -0
  31. data/ext/itsi_server/src/server/io_stream.rs +104 -0
  32. data/ext/itsi_server/src/server/itsi_ca/itsi_ca.crt +13 -0
  33. data/ext/itsi_server/src/server/itsi_ca/itsi_ca.key +5 -0
  34. data/ext/itsi_server/src/server/itsi_server.rs +244 -0
  35. data/ext/itsi_server/src/server/lifecycle_event.rs +9 -0
  36. data/ext/itsi_server/src/server/listener.rs +275 -0
  37. data/ext/itsi_server/src/server/mod.rs +11 -0
  38. data/ext/itsi_server/src/server/process_worker.rs +196 -0
  39. data/ext/itsi_server/src/server/serve_strategy/cluster_mode.rs +254 -0
  40. data/ext/itsi_server/src/server/serve_strategy/mod.rs +27 -0
  41. data/ext/itsi_server/src/server/serve_strategy/single_mode.rs +241 -0
  42. data/ext/itsi_server/src/server/signal.rs +70 -0
  43. data/ext/itsi_server/src/server/thread_worker.rs +368 -0
  44. data/ext/itsi_server/src/server/tls.rs +152 -0
  45. data/ext/itsi_tracing/Cargo.toml +4 -0
  46. data/ext/itsi_tracing/src/lib.rs +36 -6
  47. data/lib/itsi/scheduler/version.rb +1 -1
  48. data/lib/itsi/scheduler.rb +137 -1
  49. metadata +38 -18
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d08ee466c5c918a930fbb9da27b80a9d44ac3147d2107202a72351665904540d
4
- data.tar.gz: 34b5bd1dc0efb3b203c49849fc45d7bf9b433df49c05e934dc1f72b2117f970b
3
+ metadata.gz: b9fb48a307a53aeed5d6ae3d5bcbe6bd9c06e9420645cd034813c27d7468c564
4
+ data.tar.gz: 5d7d60200f47f3eeff3be39bd94e84829fde9d4ae0b01f9ea6fc6cc6229312de
5
5
  SHA512:
6
- metadata.gz: 6aca65a7304258e86f39ae94071e8aa1e6f902b4fb4c3c89c30be7920868b3e4ba312b392436edb248fe01f95a8deb0d84291914498bcce255d4cd5f6de8dfd5
7
- data.tar.gz: 78613c2efceceb9c37dfd2f94b8a4578dffdd850ef1aaafcabfc31aae8c7b2271bc70de886259d017d5d5b1711c5e16760adaeffdc44c7d39a505b53611b5ed0
6
+ metadata.gz: 490e90d87ca37b16e2a697e1f32f23e288f44c76ee13a9af8cd09048ad730f72fec07dec5ded32c955cbcf863e68cc2eb36a7cea023bd80bcc41871397eb4530
7
+ data.tar.gz: dfda712ee4e8d385c7c7a16e7de24c404c14a817d2c4b92a784ac89d6bfad35ba7e4b74ff9b8f379e331b7107f8436c12c233b02b0313ae61546f9d4997e7756
data/Cargo.lock CHANGED
@@ -11,6 +11,23 @@ dependencies = [
11
11
  "memchr",
12
12
  ]
13
13
 
14
+ [[package]]
15
+ name = "atty"
16
+ version = "0.2.14"
17
+ source = "registry+https://github.com/rust-lang/crates.io-index"
18
+ checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
19
+ dependencies = [
20
+ "hermit-abi",
21
+ "libc",
22
+ "winapi",
23
+ ]
24
+
25
+ [[package]]
26
+ name = "autocfg"
27
+ version = "1.4.0"
28
+ source = "registry+https://github.com/rust-lang/crates.io-index"
29
+ checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26"
30
+
14
31
  [[package]]
15
32
  name = "base64"
16
33
  version = "0.22.1"
@@ -34,7 +51,7 @@ dependencies = [
34
51
  "regex",
35
52
  "rustc-hash",
36
53
  "shlex",
37
- "syn",
54
+ "syn 2.0.98",
38
55
  ]
39
56
 
40
57
  [[package]]
@@ -45,9 +62,9 @@ checksum = "8f68f53c83ab957f72c32642f3868eec03eb974d1fb82e453128456482613d36"
45
62
 
46
63
  [[package]]
47
64
  name = "bytes"
48
- version = "1.10.0"
65
+ version = "1.10.1"
49
66
  source = "registry+https://github.com/rust-lang/crates.io-index"
50
- checksum = "f61dac84819c6588b558454b194026eb1f09c293b9036ae9b159e74e73ab6cf9"
67
+ checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a"
51
68
 
52
69
  [[package]]
53
70
  name = "cc"
@@ -73,6 +90,12 @@ version = "1.0.0"
73
90
  source = "registry+https://github.com/rust-lang/crates.io-index"
74
91
  checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
75
92
 
93
+ [[package]]
94
+ name = "cfg_aliases"
95
+ version = "0.2.1"
96
+ source = "registry+https://github.com/rust-lang/crates.io-index"
97
+ checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724"
98
+
76
99
  [[package]]
77
100
  name = "clang-sys"
78
101
  version = "1.8.1"
@@ -93,6 +116,27 @@ dependencies = [
93
116
  "powerfmt",
94
117
  ]
95
118
 
119
+ [[package]]
120
+ name = "derive_more"
121
+ version = "2.0.1"
122
+ source = "registry+https://github.com/rust-lang/crates.io-index"
123
+ checksum = "093242cf7570c207c83073cf82f79706fe7b8317e98620a47d5be7c3d8497678"
124
+ dependencies = [
125
+ "derive_more-impl",
126
+ ]
127
+
128
+ [[package]]
129
+ name = "derive_more-impl"
130
+ version = "2.0.1"
131
+ source = "registry+https://github.com/rust-lang/crates.io-index"
132
+ checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3"
133
+ dependencies = [
134
+ "proc-macro2",
135
+ "quote",
136
+ "syn 2.0.98",
137
+ "unicode-xid",
138
+ ]
139
+
96
140
  [[package]]
97
141
  name = "either"
98
142
  version = "1.14.0"
@@ -116,6 +160,21 @@ version = "0.3.2"
116
160
  source = "registry+https://github.com/rust-lang/crates.io-index"
117
161
  checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2"
118
162
 
163
+ [[package]]
164
+ name = "hermit-abi"
165
+ version = "0.1.19"
166
+ source = "registry+https://github.com/rust-lang/crates.io-index"
167
+ checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
168
+ dependencies = [
169
+ "libc",
170
+ ]
171
+
172
+ [[package]]
173
+ name = "httparse"
174
+ version = "1.10.1"
175
+ source = "registry+https://github.com/rust-lang/crates.io-index"
176
+ checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87"
177
+
119
178
  [[package]]
120
179
  name = "itertools"
121
180
  version = "0.12.1"
@@ -125,30 +184,57 @@ dependencies = [
125
184
  "either",
126
185
  ]
127
186
 
187
+ [[package]]
188
+ name = "itoa"
189
+ version = "1.0.15"
190
+ source = "registry+https://github.com/rust-lang/crates.io-index"
191
+ checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
192
+
128
193
  [[package]]
129
194
  name = "itsi-scheduler"
130
195
  version = "0.1.0"
131
196
  dependencies = [
197
+ "bytes",
198
+ "derive_more",
132
199
  "itsi_error",
200
+ "itsi_instrument_entry",
133
201
  "itsi_rb_helpers",
134
202
  "itsi_tracing",
135
- "magnus 0.6.4",
203
+ "magnus",
204
+ "mio",
205
+ "nix",
206
+ "parking_lot",
207
+ "rb-sys",
208
+ "tracing",
136
209
  ]
137
210
 
138
211
  [[package]]
139
212
  name = "itsi_error"
140
213
  version = "0.1.0"
141
214
  dependencies = [
142
- "magnus 0.7.1",
215
+ "httparse",
216
+ "magnus",
217
+ "nix",
143
218
  "rcgen",
144
219
  "thiserror",
145
220
  ]
146
221
 
222
+ [[package]]
223
+ name = "itsi_instrument_entry"
224
+ version = "0.1.0"
225
+ dependencies = [
226
+ "proc-macro2",
227
+ "quote",
228
+ "syn 1.0.109",
229
+ ]
230
+
147
231
  [[package]]
148
232
  name = "itsi_rb_helpers"
149
233
  version = "0.1.0"
150
234
  dependencies = [
151
- "magnus 0.7.1",
235
+ "cfg-if",
236
+ "magnus",
237
+ "nix",
152
238
  "rb-sys",
153
239
  ]
154
240
 
@@ -156,7 +242,9 @@ dependencies = [
156
242
  name = "itsi_tracing"
157
243
  version = "0.1.0"
158
244
  dependencies = [
245
+ "atty",
159
246
  "tracing",
247
+ "tracing-attributes",
160
248
  "tracing-subscriber",
161
249
  ]
162
250
 
@@ -189,22 +277,20 @@ dependencies = [
189
277
  ]
190
278
 
191
279
  [[package]]
192
- name = "log"
193
- version = "0.4.26"
280
+ name = "lock_api"
281
+ version = "0.4.12"
194
282
  source = "registry+https://github.com/rust-lang/crates.io-index"
195
- checksum = "30bde2b3dc3671ae49d8e2e9f044c7c005836e7a023ee57cffa25ab82764bb9e"
283
+ checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17"
284
+ dependencies = [
285
+ "autocfg",
286
+ "scopeguard",
287
+ ]
196
288
 
197
289
  [[package]]
198
- name = "magnus"
199
- version = "0.6.4"
290
+ name = "log"
291
+ version = "0.4.26"
200
292
  source = "registry+https://github.com/rust-lang/crates.io-index"
201
- checksum = "b1597ef40aa8c36be098249e82c9a20cf7199278ac1c1a1a995eeead6a184479"
202
- dependencies = [
203
- "magnus-macros",
204
- "rb-sys",
205
- "rb-sys-env",
206
- "seq-macro",
207
- ]
293
+ checksum = "30bde2b3dc3671ae49d8e2e9f044c7c005836e7a023ee57cffa25ab82764bb9e"
208
294
 
209
295
  [[package]]
210
296
  name = "magnus"
@@ -227,7 +313,7 @@ checksum = "5968c820e2960565f647819f5928a42d6e874551cab9d88d75e3e0660d7f71e3"
227
313
  dependencies = [
228
314
  "proc-macro2",
229
315
  "quote",
230
- "syn",
316
+ "syn 2.0.98",
231
317
  ]
232
318
 
233
319
  [[package]]
@@ -251,6 +337,30 @@ version = "0.2.1"
251
337
  source = "registry+https://github.com/rust-lang/crates.io-index"
252
338
  checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
253
339
 
340
+ [[package]]
341
+ name = "mio"
342
+ version = "1.0.3"
343
+ source = "registry+https://github.com/rust-lang/crates.io-index"
344
+ checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd"
345
+ dependencies = [
346
+ "libc",
347
+ "log",
348
+ "wasi",
349
+ "windows-sys",
350
+ ]
351
+
352
+ [[package]]
353
+ name = "nix"
354
+ version = "0.29.0"
355
+ source = "registry+https://github.com/rust-lang/crates.io-index"
356
+ checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46"
357
+ dependencies = [
358
+ "bitflags",
359
+ "cfg-if",
360
+ "cfg_aliases",
361
+ "libc",
362
+ ]
363
+
254
364
  [[package]]
255
365
  name = "nom"
256
366
  version = "7.1.3"
@@ -289,6 +399,29 @@ version = "0.1.1"
289
399
  source = "registry+https://github.com/rust-lang/crates.io-index"
290
400
  checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
291
401
 
402
+ [[package]]
403
+ name = "parking_lot"
404
+ version = "0.12.3"
405
+ source = "registry+https://github.com/rust-lang/crates.io-index"
406
+ checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27"
407
+ dependencies = [
408
+ "lock_api",
409
+ "parking_lot_core",
410
+ ]
411
+
412
+ [[package]]
413
+ name = "parking_lot_core"
414
+ version = "0.9.10"
415
+ source = "registry+https://github.com/rust-lang/crates.io-index"
416
+ checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8"
417
+ dependencies = [
418
+ "cfg-if",
419
+ "libc",
420
+ "redox_syscall",
421
+ "smallvec",
422
+ "windows-targets",
423
+ ]
424
+
292
425
  [[package]]
293
426
  name = "pem"
294
427
  version = "3.0.5"
@@ -350,7 +483,7 @@ dependencies = [
350
483
  "quote",
351
484
  "regex",
352
485
  "shell-words",
353
- "syn",
486
+ "syn 2.0.98",
354
487
  ]
355
488
 
356
489
  [[package]]
@@ -372,6 +505,15 @@ dependencies = [
372
505
  "yasna",
373
506
  ]
374
507
 
508
+ [[package]]
509
+ name = "redox_syscall"
510
+ version = "0.5.10"
511
+ source = "registry+https://github.com/rust-lang/crates.io-index"
512
+ checksum = "0b8c0c260b63a8219631167be35e6a988e9554dbd323f8bd08439c8ed1302bd1"
513
+ dependencies = [
514
+ "bitflags",
515
+ ]
516
+
375
517
  [[package]]
376
518
  name = "regex"
377
519
  version = "1.11.1"
@@ -442,6 +584,18 @@ version = "1.11.0"
442
584
  source = "registry+https://github.com/rust-lang/crates.io-index"
443
585
  checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c"
444
586
 
587
+ [[package]]
588
+ name = "ryu"
589
+ version = "1.0.20"
590
+ source = "registry+https://github.com/rust-lang/crates.io-index"
591
+ checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f"
592
+
593
+ [[package]]
594
+ name = "scopeguard"
595
+ version = "1.2.0"
596
+ source = "registry+https://github.com/rust-lang/crates.io-index"
597
+ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
598
+
445
599
  [[package]]
446
600
  name = "seq-macro"
447
601
  version = "0.3.5"
@@ -465,7 +619,19 @@ checksum = "f09503e191f4e797cb8aac08e9a4a4695c5edf6a2e70e376d961ddd5c969f82b"
465
619
  dependencies = [
466
620
  "proc-macro2",
467
621
  "quote",
468
- "syn",
622
+ "syn 2.0.98",
623
+ ]
624
+
625
+ [[package]]
626
+ name = "serde_json"
627
+ version = "1.0.140"
628
+ source = "registry+https://github.com/rust-lang/crates.io-index"
629
+ checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373"
630
+ dependencies = [
631
+ "itoa",
632
+ "memchr",
633
+ "ryu",
634
+ "serde",
469
635
  ]
470
636
 
471
637
  [[package]]
@@ -495,6 +661,17 @@ version = "1.14.0"
495
661
  source = "registry+https://github.com/rust-lang/crates.io-index"
496
662
  checksum = "7fcf8323ef1faaee30a44a340193b1ac6814fd9b7b4e88e9d4519a3e4abe1cfd"
497
663
 
664
+ [[package]]
665
+ name = "syn"
666
+ version = "1.0.109"
667
+ source = "registry+https://github.com/rust-lang/crates.io-index"
668
+ checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
669
+ dependencies = [
670
+ "proc-macro2",
671
+ "quote",
672
+ "unicode-ident",
673
+ ]
674
+
498
675
  [[package]]
499
676
  name = "syn"
500
677
  version = "2.0.98"
@@ -523,7 +700,7 @@ checksum = "26afc1baea8a989337eeb52b6e72a039780ce45c3edfcc9c5b9d112feeb173c2"
523
700
  dependencies = [
524
701
  "proc-macro2",
525
702
  "quote",
526
- "syn",
703
+ "syn 2.0.98",
527
704
  ]
528
705
 
529
706
  [[package]]
@@ -574,7 +751,7 @@ checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d"
574
751
  dependencies = [
575
752
  "proc-macro2",
576
753
  "quote",
577
- "syn",
754
+ "syn 2.0.98",
578
755
  ]
579
756
 
580
757
  [[package]]
@@ -598,6 +775,16 @@ dependencies = [
598
775
  "tracing-core",
599
776
  ]
600
777
 
778
+ [[package]]
779
+ name = "tracing-serde"
780
+ version = "0.2.0"
781
+ source = "registry+https://github.com/rust-lang/crates.io-index"
782
+ checksum = "704b1aeb7be0d0a84fc9828cae51dab5970fee5088f83d1dd7ee6f6246fc6ff1"
783
+ dependencies = [
784
+ "serde",
785
+ "tracing-core",
786
+ ]
787
+
601
788
  [[package]]
602
789
  name = "tracing-subscriber"
603
790
  version = "0.3.19"
@@ -608,12 +795,15 @@ dependencies = [
608
795
  "nu-ansi-term",
609
796
  "once_cell",
610
797
  "regex",
798
+ "serde",
799
+ "serde_json",
611
800
  "sharded-slab",
612
801
  "smallvec",
613
802
  "thread_local",
614
803
  "tracing",
615
804
  "tracing-core",
616
805
  "tracing-log",
806
+ "tracing-serde",
617
807
  ]
618
808
 
619
809
  [[package]]
@@ -622,6 +812,12 @@ version = "1.0.17"
622
812
  source = "registry+https://github.com/rust-lang/crates.io-index"
623
813
  checksum = "00e2473a93778eb0bad35909dff6a10d28e63f792f16ed15e404fca9d5eeedbe"
624
814
 
815
+ [[package]]
816
+ name = "unicode-xid"
817
+ version = "0.2.6"
818
+ source = "registry+https://github.com/rust-lang/crates.io-index"
819
+ checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853"
820
+
625
821
  [[package]]
626
822
  name = "untrusted"
627
823
  version = "0.9.0"
data/Rakefile CHANGED
@@ -3,7 +3,13 @@
3
3
  require "bundler/gem_tasks"
4
4
  require "minitest/test_task"
5
5
 
6
- Minitest::TestTask.create
6
+ Minitest::TestTask.create(:test) do |t|
7
+ t.libs << 'test'
8
+ t.libs << 'lib'
9
+ t.warning = false
10
+ t.test_globs = ['test/**/*.rb']
11
+ t.test_prelude = 'require "helpers/test_helper.rb"'
12
+ end
7
13
 
8
14
  require "rubocop/rake_task"
9
15
 
@@ -7,3 +7,5 @@ edition = "2024"
7
7
  thiserror = "2.0.11"
8
8
  magnus = { version = "0.7.1" }
9
9
  rcgen = "0.13.2"
10
+ nix = "0.29.0"
11
+ httparse = "1.10.1"
@@ -0,0 +1,70 @@
1
+ use crate::ItsiError;
2
+ use std::ffi::NulError;
3
+
4
+ pub static CLIENT_CONNECTION_CLOSED: &str = "Client disconnected";
5
+
6
+ impl From<httparse::Error> for ItsiError {
7
+ fn from(err: httparse::Error) -> Self {
8
+ ItsiError::ArgumentError(err.to_string())
9
+ }
10
+ }
11
+
12
+ impl From<nix::errno::Errno> for ItsiError {
13
+ fn from(err: nix::errno::Errno) -> Self {
14
+ ItsiError::ArgumentError(err.to_string())
15
+ }
16
+ }
17
+
18
+ impl From<std::io::Error> for ItsiError {
19
+ fn from(err: std::io::Error) -> Self {
20
+ ItsiError::ArgumentError(err.to_string())
21
+ }
22
+ }
23
+
24
+ impl From<rcgen::Error> for ItsiError {
25
+ fn from(err: rcgen::Error) -> Self {
26
+ ItsiError::ArgumentError(err.to_string())
27
+ }
28
+ }
29
+
30
+ impl From<NulError> for ItsiError {
31
+ fn from(err: NulError) -> Self {
32
+ ItsiError::ArgumentError(err.to_string())
33
+ }
34
+ }
35
+
36
+ impl From<magnus::Error> for ItsiError {
37
+ fn from(err: magnus::Error) -> Self {
38
+ match err.error_type() {
39
+ magnus::error::ErrorType::Jump(tag) => ItsiError::Jump(tag.to_string()),
40
+ magnus::error::ErrorType::Error(_exception_class, cow) => {
41
+ ItsiError::ArgumentError(cow.to_string())
42
+ }
43
+ magnus::error::ErrorType::Exception(exception) => {
44
+ ItsiError::ArgumentError(exception.to_string())
45
+ }
46
+ }
47
+ }
48
+ }
49
+
50
+ impl From<ItsiError> for magnus::Error {
51
+ fn from(err: ItsiError) -> Self {
52
+ match err {
53
+ ItsiError::InvalidInput(msg) => magnus::Error::new(magnus::exception::arg_error(), msg),
54
+ ItsiError::InternalServerError(msg) => {
55
+ magnus::Error::new(magnus::exception::exception(), msg)
56
+ }
57
+ ItsiError::UnsupportedProtocol(msg) => {
58
+ magnus::Error::new(magnus::exception::arg_error(), msg)
59
+ }
60
+ ItsiError::ArgumentError(msg) => {
61
+ magnus::Error::new(magnus::exception::arg_error(), msg)
62
+ }
63
+ ItsiError::Jump(msg) => magnus::Error::new(magnus::exception::local_jump_error(), msg),
64
+ ItsiError::Break() => magnus::Error::new(magnus::exception::interrupt(), "Break"),
65
+ ItsiError::ClientConnectionClosed => {
66
+ magnus::Error::new(magnus::exception::eof_error(), CLIENT_CONNECTION_CLOSED)
67
+ }
68
+ }
69
+ }
70
+ }
@@ -1,49 +1,22 @@
1
+ pub mod from;
1
2
  use thiserror::Error;
2
3
 
3
4
  pub type Result<T> = std::result::Result<T, ItsiError>;
4
5
 
5
6
  #[derive(Error, Debug)]
6
7
  pub enum ItsiError {
7
- #[error("Invalid input")]
8
+ #[error("Invalid input {0}")]
8
9
  InvalidInput(String),
9
- #[error("Internal server error")]
10
- InternalServerError,
11
- #[error("Unsupported protocol")]
10
+ #[error("Internal server error {0}")]
11
+ InternalServerError(String),
12
+ #[error("Unsupported protocol {0}")]
12
13
  UnsupportedProtocol(String),
13
- #[error("Argument error")]
14
+ #[error("Argument error: {0}")]
14
15
  ArgumentError(String),
16
+ #[error("Client Connection Closed")]
17
+ ClientConnectionClosed,
15
18
  #[error("Jump")]
16
19
  Jump(String),
17
- }
18
-
19
- impl From<ItsiError> for magnus::Error {
20
- fn from(err: ItsiError) -> Self {
21
- magnus::Error::new(magnus::exception::runtime_error(), err.to_string())
22
- }
23
- }
24
-
25
- impl From<std::io::Error> for ItsiError {
26
- fn from(err: std::io::Error) -> Self {
27
- ItsiError::ArgumentError(err.to_string())
28
- }
29
- }
30
-
31
- impl From<rcgen::Error> for ItsiError {
32
- fn from(err: rcgen::Error) -> Self {
33
- ItsiError::ArgumentError(err.to_string())
34
- }
35
- }
36
-
37
- impl From<magnus::Error> for ItsiError {
38
- fn from(err: magnus::Error) -> Self {
39
- match err.error_type() {
40
- magnus::error::ErrorType::Jump(tag) => ItsiError::Jump(tag.to_string()),
41
- magnus::error::ErrorType::Error(_exception_class, cow) => {
42
- ItsiError::ArgumentError(cow.to_string())
43
- }
44
- magnus::error::ErrorType::Exception(exception) => {
45
- ItsiError::ArgumentError(exception.to_string())
46
- }
47
- }
48
- }
20
+ #[error("Break")]
21
+ Break(),
49
22
  }
@@ -0,0 +1,15 @@
1
+ [package]
2
+ name = "itsi_instrument_entry"
3
+ version = "0.1.0"
4
+ edition = "2021"
5
+ authors = ["Wouter Coppieters <wc@pico.net.nz>"]
6
+ license = "MIT"
7
+ publish = false
8
+
9
+
10
+ [lib]
11
+ proc-macro = true
12
+ [dependencies]
13
+ proc-macro2 = "1.0"
14
+ quote = "1.0"
15
+ syn = { version = "1.0", features = ["full"] }
@@ -0,0 +1,31 @@
1
+ use proc_macro::TokenStream;
2
+ use proc_macro2::TokenStream as TokenStream2;
3
+ use quote::quote;
4
+ use syn::{parse_macro_input, ItemFn};
5
+
6
+ #[proc_macro_attribute]
7
+ pub fn instrument_with_entry(attr: TokenStream, item: TokenStream) -> TokenStream {
8
+ let attr_tokens = TokenStream2::from(attr);
9
+ let input_fn = parse_macro_input!(item as ItemFn);
10
+ let attrs = input_fn.attrs;
11
+ let vis = input_fn.vis;
12
+ let sig = input_fn.sig;
13
+ let block = input_fn.block;
14
+ let output = quote! {
15
+ #[cfg(debug_assertions)]
16
+ #[tracing::instrument(#attr_tokens)]
17
+ #(#attrs)*
18
+ #vis #sig {
19
+ tracing::trace!("");
20
+ #block
21
+ }
22
+
23
+ #[cfg(not(debug_assertions))]
24
+ #(#attrs)*
25
+ #vis #sig {
26
+ #block
27
+ }
28
+ };
29
+
30
+ output.into()
31
+ }
@@ -4,5 +4,7 @@ version = "0.1.0"
4
4
  edition = "2024"
5
5
 
6
6
  [dependencies]
7
+ cfg-if = "1.0.0"
7
8
  magnus = { version = "0.7.1", features = ["rb-sys", "bytes"] }
9
+ nix = "0.29.0"
8
10
  rb-sys = "0.9.105"