itsi 0.2.15 → 0.2.17

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 (182) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +23 -0
  3. data/Cargo.lock +76 -74
  4. data/crates/itsi_acme/Cargo.toml +1 -1
  5. data/crates/itsi_scheduler/Cargo.toml +1 -1
  6. data/crates/itsi_scheduler/extconf.rb +3 -1
  7. data/crates/itsi_server/Cargo.lock +1 -1
  8. data/crates/itsi_server/Cargo.toml +3 -1
  9. data/crates/itsi_server/extconf.rb +3 -1
  10. data/crates/itsi_server/src/lib.rs +7 -1
  11. data/crates/itsi_server/src/ruby_types/itsi_body_proxy/mod.rs +2 -0
  12. data/crates/itsi_server/src/ruby_types/itsi_grpc_call.rs +6 -6
  13. data/crates/itsi_server/src/ruby_types/itsi_grpc_response_stream/mod.rs +14 -13
  14. data/crates/itsi_server/src/ruby_types/itsi_http_request.rs +71 -42
  15. data/crates/itsi_server/src/ruby_types/itsi_http_response.rs +151 -152
  16. data/crates/itsi_server/src/ruby_types/itsi_server/file_watcher.rs +6 -15
  17. data/crates/itsi_server/src/ruby_types/itsi_server/itsi_server_config.rs +32 -6
  18. data/crates/itsi_server/src/ruby_types/itsi_server.rs +1 -1
  19. data/crates/itsi_server/src/server/binds/listener.rs +49 -8
  20. data/crates/itsi_server/src/server/frame_stream.rs +142 -0
  21. data/crates/itsi_server/src/server/http_message_types.rs +143 -10
  22. data/crates/itsi_server/src/server/io_stream.rs +28 -5
  23. data/crates/itsi_server/src/server/lifecycle_event.rs +1 -1
  24. data/crates/itsi_server/src/server/middleware_stack/middlewares/auth_basic.rs +2 -3
  25. data/crates/itsi_server/src/server/middleware_stack/middlewares/compression.rs +8 -10
  26. data/crates/itsi_server/src/server/middleware_stack/middlewares/cors.rs +2 -3
  27. data/crates/itsi_server/src/server/middleware_stack/middlewares/csp.rs +3 -3
  28. data/crates/itsi_server/src/server/middleware_stack/middlewares/error_response/default_responses.rs +54 -58
  29. data/crates/itsi_server/src/server/middleware_stack/middlewares/error_response.rs +6 -9
  30. data/crates/itsi_server/src/server/middleware_stack/middlewares/etag.rs +27 -42
  31. data/crates/itsi_server/src/server/middleware_stack/middlewares/log_requests.rs +65 -14
  32. data/crates/itsi_server/src/server/middleware_stack/middlewares/max_body.rs +1 -1
  33. data/crates/itsi_server/src/server/middleware_stack/middlewares/proxy.rs +8 -11
  34. data/crates/itsi_server/src/server/middleware_stack/middlewares/rate_limit.rs +21 -8
  35. data/crates/itsi_server/src/server/middleware_stack/middlewares/redirect.rs +2 -3
  36. data/crates/itsi_server/src/server/middleware_stack/middlewares/ruby_app.rs +1 -5
  37. data/crates/itsi_server/src/server/middleware_stack/middlewares/static_assets.rs +1 -2
  38. data/crates/itsi_server/src/server/middleware_stack/middlewares/static_response.rs +13 -6
  39. data/crates/itsi_server/src/server/mod.rs +1 -0
  40. data/crates/itsi_server/src/server/process_worker.rs +5 -5
  41. data/crates/itsi_server/src/server/serve_strategy/acceptor.rs +100 -0
  42. data/crates/itsi_server/src/server/serve_strategy/cluster_mode.rs +87 -31
  43. data/crates/itsi_server/src/server/serve_strategy/mod.rs +1 -0
  44. data/crates/itsi_server/src/server/serve_strategy/single_mode.rs +166 -206
  45. data/crates/itsi_server/src/server/signal.rs +37 -9
  46. data/crates/itsi_server/src/server/thread_worker.rs +92 -70
  47. data/crates/itsi_server/src/services/itsi_http_service.rs +67 -62
  48. data/crates/itsi_server/src/services/mime_types.rs +185 -183
  49. data/crates/itsi_server/src/services/rate_limiter.rs +16 -34
  50. data/crates/itsi_server/src/services/static_file_server.rs +35 -60
  51. data/docs/benchmark-dashboard/.gitignore +27 -0
  52. data/docs/benchmark-dashboard/app/api/benchmarks/route.ts +22 -0
  53. data/docs/benchmark-dashboard/app/globals.css +94 -0
  54. data/docs/benchmark-dashboard/app/layout.tsx +20 -0
  55. data/docs/benchmark-dashboard/app/page.tsx +252 -0
  56. data/docs/benchmark-dashboard/components/benchmark-dashboard.tsx +1663 -0
  57. data/docs/benchmark-dashboard/components/theme-provider.tsx +11 -0
  58. data/docs/benchmark-dashboard/components/ui/accordion.tsx +58 -0
  59. data/docs/benchmark-dashboard/components/ui/alert-dialog.tsx +141 -0
  60. data/docs/benchmark-dashboard/components/ui/alert.tsx +59 -0
  61. data/docs/benchmark-dashboard/components/ui/aspect-ratio.tsx +7 -0
  62. data/docs/benchmark-dashboard/components/ui/avatar.tsx +50 -0
  63. data/docs/benchmark-dashboard/components/ui/badge.tsx +36 -0
  64. data/docs/benchmark-dashboard/components/ui/breadcrumb.tsx +115 -0
  65. data/docs/benchmark-dashboard/components/ui/button.tsx +56 -0
  66. data/docs/benchmark-dashboard/components/ui/calendar.tsx +66 -0
  67. data/docs/benchmark-dashboard/components/ui/card.tsx +79 -0
  68. data/docs/benchmark-dashboard/components/ui/carousel.tsx +262 -0
  69. data/docs/benchmark-dashboard/components/ui/chart.tsx +365 -0
  70. data/docs/benchmark-dashboard/components/ui/checkbox.tsx +30 -0
  71. data/docs/benchmark-dashboard/components/ui/collapsible.tsx +11 -0
  72. data/docs/benchmark-dashboard/components/ui/command.tsx +153 -0
  73. data/docs/benchmark-dashboard/components/ui/context-menu.tsx +200 -0
  74. data/docs/benchmark-dashboard/components/ui/dialog.tsx +122 -0
  75. data/docs/benchmark-dashboard/components/ui/drawer.tsx +118 -0
  76. data/docs/benchmark-dashboard/components/ui/dropdown-menu.tsx +200 -0
  77. data/docs/benchmark-dashboard/components/ui/form.tsx +178 -0
  78. data/docs/benchmark-dashboard/components/ui/hover-card.tsx +29 -0
  79. data/docs/benchmark-dashboard/components/ui/input-otp.tsx +71 -0
  80. data/docs/benchmark-dashboard/components/ui/input.tsx +22 -0
  81. data/docs/benchmark-dashboard/components/ui/label.tsx +26 -0
  82. data/docs/benchmark-dashboard/components/ui/loading-spinner.tsx +12 -0
  83. data/docs/benchmark-dashboard/components/ui/menubar.tsx +236 -0
  84. data/docs/benchmark-dashboard/components/ui/navigation-menu.tsx +128 -0
  85. data/docs/benchmark-dashboard/components/ui/pagination.tsx +117 -0
  86. data/docs/benchmark-dashboard/components/ui/popover.tsx +31 -0
  87. data/docs/benchmark-dashboard/components/ui/progress.tsx +28 -0
  88. data/docs/benchmark-dashboard/components/ui/radio-group.tsx +44 -0
  89. data/docs/benchmark-dashboard/components/ui/resizable.tsx +45 -0
  90. data/docs/benchmark-dashboard/components/ui/scroll-area.tsx +48 -0
  91. data/docs/benchmark-dashboard/components/ui/select.tsx +160 -0
  92. data/docs/benchmark-dashboard/components/ui/separator.tsx +31 -0
  93. data/docs/benchmark-dashboard/components/ui/sheet.tsx +140 -0
  94. data/docs/benchmark-dashboard/components/ui/sidebar.tsx +763 -0
  95. data/docs/benchmark-dashboard/components/ui/skeleton.tsx +15 -0
  96. data/docs/benchmark-dashboard/components/ui/slider.tsx +28 -0
  97. data/docs/benchmark-dashboard/components/ui/sonner.tsx +31 -0
  98. data/docs/benchmark-dashboard/components/ui/switch.tsx +29 -0
  99. data/docs/benchmark-dashboard/components/ui/table.tsx +117 -0
  100. data/docs/benchmark-dashboard/components/ui/tabs.tsx +55 -0
  101. data/docs/benchmark-dashboard/components/ui/textarea.tsx +22 -0
  102. data/docs/benchmark-dashboard/components/ui/toast.tsx +129 -0
  103. data/docs/benchmark-dashboard/components/ui/toaster.tsx +35 -0
  104. data/docs/benchmark-dashboard/components/ui/toggle-group.tsx +61 -0
  105. data/docs/benchmark-dashboard/components/ui/toggle.tsx +45 -0
  106. data/docs/benchmark-dashboard/components/ui/tooltip.tsx +30 -0
  107. data/docs/benchmark-dashboard/components/ui/use-mobile.tsx +19 -0
  108. data/docs/benchmark-dashboard/components/ui/use-toast.ts +194 -0
  109. data/docs/benchmark-dashboard/components.json +21 -0
  110. data/docs/benchmark-dashboard/dist/benchmark-dashboard.css +1 -0
  111. data/docs/benchmark-dashboard/dist/benchmark-dashboard.iife.js +211 -0
  112. data/docs/benchmark-dashboard/dist/placeholder-logo.png +0 -0
  113. data/docs/benchmark-dashboard/dist/placeholder-logo.svg +1 -0
  114. data/docs/benchmark-dashboard/dist/placeholder-user.jpg +0 -0
  115. data/docs/benchmark-dashboard/dist/placeholder.jpg +0 -0
  116. data/docs/benchmark-dashboard/dist/placeholder.svg +1 -0
  117. data/docs/benchmark-dashboard/embed.tsx +13 -0
  118. data/docs/benchmark-dashboard/hooks/use-mobile.tsx +19 -0
  119. data/docs/benchmark-dashboard/hooks/use-toast.ts +194 -0
  120. data/docs/benchmark-dashboard/lib/benchmark-utils.ts +54 -0
  121. data/docs/benchmark-dashboard/lib/utils.ts +6 -0
  122. data/docs/benchmark-dashboard/next.config.mjs +14 -0
  123. data/docs/benchmark-dashboard/package-lock.json +5859 -0
  124. data/docs/benchmark-dashboard/package.json +72 -0
  125. data/docs/benchmark-dashboard/pnpm-lock.yaml +5 -0
  126. data/docs/benchmark-dashboard/postcss.config.mjs +8 -0
  127. data/docs/benchmark-dashboard/styles/globals.css +94 -0
  128. data/docs/benchmark-dashboard/tailwind.config.ts +96 -0
  129. data/docs/benchmark-dashboard/tsconfig.json +27 -0
  130. data/docs/benchmark-dashboard/vite.config.ts +24 -0
  131. data/docs/build.rb +52 -0
  132. data/docs/content/benchmarks/index.md +96 -0
  133. data/docs/content/features/_index.md +1 -1
  134. data/docs/content/getting_started/_index.md +76 -46
  135. data/docs/hugo.yaml +3 -0
  136. data/docs/static/results.json +1 -0
  137. data/docs/static/scripts/benchmark-dashboard.iife.js +211 -0
  138. data/docs/static/styles/benchmark-dashboard.css +1 -0
  139. data/examples/rails_with_static_assets/Gemfile.lock +1 -1
  140. data/examples/rails_with_static_assets/Itsi.rb +4 -1
  141. data/gems/scheduler/Cargo.lock +15 -15
  142. data/gems/scheduler/lib/itsi/scheduler/version.rb +1 -1
  143. data/gems/server/Cargo.lock +75 -73
  144. data/gems/server/exe/itsi +6 -1
  145. data/gems/server/lib/itsi/http_request.rb +31 -39
  146. data/gems/server/lib/itsi/http_response.rb +5 -0
  147. data/gems/server/lib/itsi/rack_env_pool.rb +59 -0
  148. data/gems/server/lib/itsi/server/config/config_helpers.rb +1 -2
  149. data/gems/server/lib/itsi/server/config/dsl.rb +5 -4
  150. data/gems/server/lib/itsi/server/config/middleware/etag.md +3 -7
  151. data/gems/server/lib/itsi/server/config/middleware/etag.rb +2 -4
  152. data/gems/server/lib/itsi/server/config/middleware/proxy.rb +1 -1
  153. data/gems/server/lib/itsi/server/config/middleware/rackup_file.rb +2 -2
  154. data/gems/server/lib/itsi/server/config/options/auto_reload_config.rb +6 -2
  155. data/gems/server/lib/itsi/server/config/options/include.rb +5 -2
  156. data/gems/server/lib/itsi/server/config/options/listen_backlog.rb +1 -1
  157. data/gems/server/lib/itsi/server/config/options/pipeline_flush.md +16 -0
  158. data/gems/server/lib/itsi/server/config/options/pipeline_flush.rb +19 -0
  159. data/gems/server/lib/itsi/server/config/options/send_buffer_size.md +15 -0
  160. data/gems/server/lib/itsi/server/config/options/send_buffer_size.rb +19 -0
  161. data/gems/server/lib/itsi/server/config/options/writev.md +25 -0
  162. data/gems/server/lib/itsi/server/config/options/writev.rb +19 -0
  163. data/gems/server/lib/itsi/server/config.rb +43 -31
  164. data/gems/server/lib/itsi/server/default_config/Itsi.rb +1 -4
  165. data/gems/server/lib/itsi/server/grpc/grpc_call.rb +2 -0
  166. data/gems/server/lib/itsi/server/grpc/grpc_interface.rb +2 -2
  167. data/gems/server/lib/itsi/server/rack/handler/itsi.rb +3 -1
  168. data/gems/server/lib/itsi/server/rack_interface.rb +17 -12
  169. data/gems/server/lib/itsi/server/route_tester.rb +1 -1
  170. data/gems/server/lib/itsi/server/scheduler_interface.rb +2 -0
  171. data/gems/server/lib/itsi/server/version.rb +1 -1
  172. data/gems/server/lib/itsi/server.rb +1 -0
  173. data/gems/server/lib/ruby_lsp/itsi/addon.rb +12 -13
  174. data/gems/server/test/helpers/test_helper.rb +12 -13
  175. data/gems/server/test/middleware/etag.rb +3 -3
  176. data/gems/server/test/middleware/grpc/grpc.rb +13 -14
  177. data/gems/server/test/middleware/grpc/test_service_impl.rb +3 -3
  178. data/gems/server/test/middleware/proxy.rb +262 -268
  179. data/gems/server/test/options/ruby_thread_request_backlog_size.rb +2 -3
  180. data/lib/itsi/version.rb +1 -1
  181. metadata +99 -6
  182. data/tasks.txt +0 -27
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 48a2f9ed6dbf64c922c0afd1a8f7ecd07fbed9587b6863cd3052eb1b957d00da
4
- data.tar.gz: c69b07d771b76e228213f251e77170ce20b81c169327781865d4f03a865e934b
3
+ metadata.gz: 0b075a4a9438fc86d5ce4840029e59e5b4d90a374aecc3a080080e626489ae51
4
+ data.tar.gz: c9feb6ed9ec31dbf7d4abcb3038d032baf16b440a6ffec54c4b4422b6bb005de
5
5
  SHA512:
6
- metadata.gz: 9f99f959ffa9090035849acd0433d9117ca73d2565d2eb0d656a2b6f2dbc2dbfcef32b27a2c2ab2c20f143faca27a6c96df000046659d36d54ab0cfd43fcb690
7
- data.tar.gz: af9a7f471ee483dcb28b6a3c1520b7a050423427f2b1219308f64ee2a12dfe862de61eb46688ae0accf2fc634c65a01e393a3f3f5044476a124541b0d0a9b453
6
+ metadata.gz: 1d903418e23ac96c5920fc3b3f6bfa6d0befafb6c9bd8cbee6a204c2d2811e2905802297611e10c4a199e666014f8cfe0da22f229e11f76cdf81664ba4dd973e
7
+ data.tar.gz: 136ae37d837c398b833a5275190f30276e2b4a5d0e740d00cc38be86cabeed111d07518931c9df2cc34984a163e4c835fe73ff0d7f555ea24676e92ebf7613f7
data/CHANGELOG.md CHANGED
@@ -1,3 +1,26 @@
1
+ ## [0.2.17] - 2025-05-31
2
+ - Enabled vectorized writes in IoSteam
3
+ - Replaced all usage of heap-allocated BoxBody with HttpBody enums
4
+ - Add 5 threads as default for rack/handler
5
+ - Reserve header size ahead of time in rack interface
6
+ - Avoid intermediate array allocation when populating Rack env headers.
7
+ - Rewrite synchronous thread worker to avoid excessive GVL acquisition
8
+ - Revert to default write_ev behaviour for http1
9
+ - Switch to service_fn from service struct to avoid one additional pinned future
10
+ - Worker pinning accepts ruby workers too
11
+ - Fixed ordering incomaptibility in etag forwarding from static file server
12
+ - Added embedded benchmark suite
13
+
14
+ ## [0.2.16] - 2025-05-02
15
+ - Optimized static error responses
16
+ - Optimized rate limit middleware
17
+ - Made default static serve command use more efficient defaults
18
+ - Reduced cloning in main accept-loop
19
+ - Fixed ability to set nodelay to false.
20
+ - Added send_buffer_size option.
21
+ - Worker pinning accepts ruby workers too
22
+ - Fixed ordering incomaptibility in etag forwarding from static file server
23
+
1
24
  ## [0.2.14] - 2025-04-30
2
25
  - Support new-line separated headers for Rack 2 backward compatibility.
3
26
 
data/Cargo.lock CHANGED
@@ -24,7 +24,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
24
24
  checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011"
25
25
  dependencies = [
26
26
  "cfg-if",
27
- "getrandom 0.2.15",
27
+ "getrandom 0.2.16",
28
28
  "once_cell",
29
29
  "version_check",
30
30
  "zerocopy 0.7.35",
@@ -176,7 +176,7 @@ checksum = "965c2d33e53cb6b267e148a4cb0760bc01f4904c1cd4bb4002a085bb016d1490"
176
176
  dependencies = [
177
177
  "proc-macro2",
178
178
  "quote",
179
- "syn 2.0.100",
179
+ "syn 2.0.101",
180
180
  "synstructure",
181
181
  ]
182
182
 
@@ -188,7 +188,7 @@ checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7"
188
188
  dependencies = [
189
189
  "proc-macro2",
190
190
  "quote",
191
- "syn 2.0.100",
191
+ "syn 2.0.101",
192
192
  ]
193
193
 
194
194
  [[package]]
@@ -205,9 +205,9 @@ dependencies = [
205
205
 
206
206
  [[package]]
207
207
  name = "async-compression"
208
- version = "0.4.22"
208
+ version = "0.4.23"
209
209
  source = "registry+https://github.com/rust-lang/crates.io-index"
210
- checksum = "59a194f9d963d8099596278594b3107448656ba73831c9d8c783e613ce86da64"
210
+ checksum = "b37fc50485c4f3f736a4fb14199f6d5f5ba008d7f28fe710306c92780f004c07"
211
211
  dependencies = [
212
212
  "brotli",
213
213
  "flate2",
@@ -228,7 +228,7 @@ checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5"
228
228
  dependencies = [
229
229
  "proc-macro2",
230
230
  "quote",
231
- "syn 2.0.100",
231
+ "syn 2.0.101",
232
232
  ]
233
233
 
234
234
  [[package]]
@@ -423,7 +423,7 @@ dependencies = [
423
423
  "regex",
424
424
  "rustc-hash 1.1.0",
425
425
  "shlex",
426
- "syn 2.0.100",
426
+ "syn 2.0.101",
427
427
  "which",
428
428
  ]
429
429
 
@@ -469,9 +469,9 @@ dependencies = [
469
469
 
470
470
  [[package]]
471
471
  name = "brotli"
472
- version = "7.0.0"
472
+ version = "8.0.0"
473
473
  source = "registry+https://github.com/rust-lang/crates.io-index"
474
- checksum = "cc97b8f16f944bba54f0433f07e30be199b6dc2bd25937444bbad560bcea29bd"
474
+ checksum = "cf19e729cdbd51af9a397fb9ef8ac8378007b797f8273cfbfdf45dcaa316167b"
475
475
  dependencies = [
476
476
  "alloc-no-stdlib",
477
477
  "alloc-stdlib",
@@ -480,9 +480,9 @@ dependencies = [
480
480
 
481
481
  [[package]]
482
482
  name = "brotli-decompressor"
483
- version = "4.0.3"
483
+ version = "5.0.0"
484
484
  source = "registry+https://github.com/rust-lang/crates.io-index"
485
- checksum = "a334ef7c9e23abf0ce748e8cd309037da93e606ad52eb372e4ce327a0dcfbdfd"
485
+ checksum = "874bb8112abecc98cbd6d81ea4fa7e94fb9449648c93cc89aa40c81c24d7de03"
486
486
  dependencies = [
487
487
  "alloc-no-stdlib",
488
488
  "alloc-stdlib",
@@ -518,9 +518,9 @@ checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a"
518
518
 
519
519
  [[package]]
520
520
  name = "cc"
521
- version = "1.2.19"
521
+ version = "1.2.20"
522
522
  source = "registry+https://github.com/rust-lang/crates.io-index"
523
- checksum = "8e3a13707ac958681c13b39b458c073d0d9bc8a22cb1b2f4c8e55eb72c13f362"
523
+ checksum = "04da6a0d40b948dfc4fa8f5bbf402b0fc1a64a28dbf7d12ffd683550f2c1b63a"
524
524
  dependencies = [
525
525
  "jobserver",
526
526
  "libc",
@@ -550,9 +550,9 @@ checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724"
550
550
 
551
551
  [[package]]
552
552
  name = "chrono"
553
- version = "0.4.40"
553
+ version = "0.4.41"
554
554
  source = "registry+https://github.com/rust-lang/crates.io-index"
555
- checksum = "1a7964611d71df112cb1730f2ee67324fcf4d0fc6606acbbe9bfe06df124637c"
555
+ checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d"
556
556
  dependencies = [
557
557
  "android-tzdata",
558
558
  "iana-time-zone",
@@ -629,7 +629,7 @@ dependencies = [
629
629
  "heck 0.5.0",
630
630
  "proc-macro2",
631
631
  "quote",
632
- "syn 2.0.100",
632
+ "syn 2.0.101",
633
633
  ]
634
634
 
635
635
  [[package]]
@@ -821,7 +821,7 @@ checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3"
821
821
  dependencies = [
822
822
  "proc-macro2",
823
823
  "quote",
824
- "syn 2.0.100",
824
+ "syn 2.0.101",
825
825
  "unicode-xid",
826
826
  ]
827
827
 
@@ -865,7 +865,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0"
865
865
  dependencies = [
866
866
  "proc-macro2",
867
867
  "quote",
868
- "syn 2.0.100",
868
+ "syn 2.0.101",
869
869
  ]
870
870
 
871
871
  [[package]]
@@ -1060,7 +1060,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650"
1060
1060
  dependencies = [
1061
1061
  "proc-macro2",
1062
1062
  "quote",
1063
- "syn 2.0.100",
1063
+ "syn 2.0.101",
1064
1064
  ]
1065
1065
 
1066
1066
  [[package]]
@@ -1105,9 +1105,9 @@ dependencies = [
1105
1105
 
1106
1106
  [[package]]
1107
1107
  name = "getrandom"
1108
- version = "0.2.15"
1108
+ version = "0.2.16"
1109
1109
  source = "registry+https://github.com/rust-lang/crates.io-index"
1110
- checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7"
1110
+ checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592"
1111
1111
  dependencies = [
1112
1112
  "cfg-if",
1113
1113
  "js-sys",
@@ -1195,9 +1195,9 @@ dependencies = [
1195
1195
 
1196
1196
  [[package]]
1197
1197
  name = "hashbrown"
1198
- version = "0.15.2"
1198
+ version = "0.15.3"
1199
1199
  source = "registry+https://github.com/rust-lang/crates.io-index"
1200
- checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289"
1200
+ checksum = "84b26c544d002229e640969970a2e74021aadf6e2f96372b9c58eff97de08eb3"
1201
1201
 
1202
1202
  [[package]]
1203
1203
  name = "headers"
@@ -1552,7 +1552,7 @@ checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6"
1552
1552
  dependencies = [
1553
1553
  "proc-macro2",
1554
1554
  "quote",
1555
- "syn 2.0.100",
1555
+ "syn 2.0.101",
1556
1556
  ]
1557
1557
 
1558
1558
  [[package]]
@@ -1644,7 +1644,7 @@ checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
1644
1644
 
1645
1645
  [[package]]
1646
1646
  name = "itsi-scheduler"
1647
- version = "0.2.15"
1647
+ version = "0.2.17"
1648
1648
  dependencies = [
1649
1649
  "bytes",
1650
1650
  "derive_more",
@@ -1662,7 +1662,7 @@ dependencies = [
1662
1662
 
1663
1663
  [[package]]
1664
1664
  name = "itsi-server"
1665
- version = "0.2.15"
1665
+ version = "0.2.17"
1666
1666
  dependencies = [
1667
1667
  "argon2",
1668
1668
  "async-channel",
@@ -1678,6 +1678,7 @@ dependencies = [
1678
1678
  "either",
1679
1679
  "fs2",
1680
1680
  "futures",
1681
+ "futures-util",
1681
1682
  "globset",
1682
1683
  "http 1.3.1",
1683
1684
  "http-body-util",
@@ -1713,6 +1714,7 @@ dependencies = [
1713
1714
  "serde_magnus",
1714
1715
  "sha-crypt",
1715
1716
  "sha2",
1717
+ "smallvec",
1716
1718
  "socket2",
1717
1719
  "sysinfo",
1718
1720
  "tempfile",
@@ -1950,7 +1952,7 @@ checksum = "5968c820e2960565f647819f5928a42d6e874551cab9d88d75e3e0660d7f71e3"
1950
1952
  dependencies = [
1951
1953
  "proc-macro2",
1952
1954
  "quote",
1953
- "syn 2.0.100",
1955
+ "syn 2.0.101",
1954
1956
  ]
1955
1957
 
1956
1958
  [[package]]
@@ -2298,7 +2300,7 @@ dependencies = [
2298
2300
  "phf_shared",
2299
2301
  "proc-macro2",
2300
2302
  "quote",
2301
- "syn 2.0.100",
2303
+ "syn 2.0.101",
2302
2304
  ]
2303
2305
 
2304
2306
  [[package]]
@@ -2327,7 +2329,7 @@ checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861"
2327
2329
  dependencies = [
2328
2330
  "proc-macro2",
2329
2331
  "quote",
2330
- "syn 2.0.100",
2332
+ "syn 2.0.101",
2331
2333
  ]
2332
2334
 
2333
2335
  [[package]]
@@ -2360,7 +2362,7 @@ version = "0.2.21"
2360
2362
  source = "registry+https://github.com/rust-lang/crates.io-index"
2361
2363
  checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9"
2362
2364
  dependencies = [
2363
- "zerocopy 0.8.24",
2365
+ "zerocopy 0.8.25",
2364
2366
  ]
2365
2367
 
2366
2368
  [[package]]
@@ -2370,7 +2372,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
2370
2372
  checksum = "664ec5419c51e34154eec046ebcba56312d5a2fc3b09a06da188e1ad21afadf6"
2371
2373
  dependencies = [
2372
2374
  "proc-macro2",
2373
- "syn 2.0.100",
2375
+ "syn 2.0.101",
2374
2376
  ]
2375
2377
 
2376
2378
  [[package]]
@@ -2440,9 +2442,9 @@ dependencies = [
2440
2442
 
2441
2443
  [[package]]
2442
2444
  name = "quinn-proto"
2443
- version = "0.11.10"
2445
+ version = "0.11.11"
2444
2446
  source = "registry+https://github.com/rust-lang/crates.io-index"
2445
- checksum = "b820744eb4dc9b57a3398183639c511b5a26d2ed702cedd3febaa1393caa22cc"
2447
+ checksum = "bcbafbbdbb0f638fe3f35f3c56739f77a8a1d070cb25603226c83339b391472b"
2446
2448
  dependencies = [
2447
2449
  "bytes",
2448
2450
  "getrandom 0.3.2",
@@ -2460,9 +2462,9 @@ dependencies = [
2460
2462
 
2461
2463
  [[package]]
2462
2464
  name = "quinn-udp"
2463
- version = "0.5.11"
2465
+ version = "0.5.12"
2464
2466
  source = "registry+https://github.com/rust-lang/crates.io-index"
2465
- checksum = "541d0f57c6ec747a90738a52741d3221f7960e8ac2f0ff4b1a63680e033b4ab5"
2467
+ checksum = "ee4e529991f949c5e25755532370b8af5d114acae52326361d68d47af64aa842"
2466
2468
  dependencies = [
2467
2469
  "cfg_aliases",
2468
2470
  "libc",
@@ -2545,7 +2547,7 @@ version = "0.6.4"
2545
2547
  source = "registry+https://github.com/rust-lang/crates.io-index"
2546
2548
  checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
2547
2549
  dependencies = [
2548
- "getrandom 0.2.15",
2550
+ "getrandom 0.2.16",
2549
2551
  ]
2550
2552
 
2551
2553
  [[package]]
@@ -2598,7 +2600,7 @@ dependencies = [
2598
2600
  "quote",
2599
2601
  "regex",
2600
2602
  "shell-words",
2601
- "syn 2.0.100",
2603
+ "syn 2.0.101",
2602
2604
  ]
2603
2605
 
2604
2606
  [[package]]
@@ -2664,7 +2666,7 @@ version = "0.5.0"
2664
2666
  source = "registry+https://github.com/rust-lang/crates.io-index"
2665
2667
  checksum = "dd6f9d3d47bdd2ad6945c5015a226ec6155d0bcdfd8f7cd29f86b71f8de99d2b"
2666
2668
  dependencies = [
2667
- "getrandom 0.2.15",
2669
+ "getrandom 0.2.16",
2668
2670
  "libredox",
2669
2671
  "thiserror 2.0.12",
2670
2672
  ]
@@ -2766,7 +2768,7 @@ checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7"
2766
2768
  dependencies = [
2767
2769
  "cc",
2768
2770
  "cfg-if",
2769
- "getrandom 0.2.15",
2771
+ "getrandom 0.2.16",
2770
2772
  "libc",
2771
2773
  "untrusted",
2772
2774
  "windows-sys 0.52.0",
@@ -2814,9 +2816,9 @@ dependencies = [
2814
2816
 
2815
2817
  [[package]]
2816
2818
  name = "rustix"
2817
- version = "1.0.5"
2819
+ version = "1.0.7"
2818
2820
  source = "registry+https://github.com/rust-lang/crates.io-index"
2819
- checksum = "d97817398dd4bb2e6da002002db259209759911da105da92bec29ccb12cf58bf"
2821
+ checksum = "c71e83d6afe7ff64890ec6b71d6a69bb8a610ab78ce364b3352876bb4c801266"
2820
2822
  dependencies = [
2821
2823
  "bitflags 2.9.0",
2822
2824
  "errno",
@@ -2980,7 +2982,7 @@ checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00"
2980
2982
  dependencies = [
2981
2983
  "proc-macro2",
2982
2984
  "quote",
2983
- "syn 2.0.100",
2985
+ "syn 2.0.101",
2984
2986
  ]
2985
2987
 
2986
2988
  [[package]]
@@ -3059,9 +3061,9 @@ checksum = "bbfa15b3dddfee50a0fff136974b3e1bde555604ba463834a7eb7deb6417705d"
3059
3061
 
3060
3062
  [[package]]
3061
3063
  name = "sha2"
3062
- version = "0.10.8"
3064
+ version = "0.10.9"
3063
3065
  source = "registry+https://github.com/rust-lang/crates.io-index"
3064
- checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8"
3066
+ checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283"
3065
3067
  dependencies = [
3066
3068
  "cfg-if",
3067
3069
  "cpufeatures",
@@ -3220,9 +3222,9 @@ dependencies = [
3220
3222
 
3221
3223
  [[package]]
3222
3224
  name = "syn"
3223
- version = "2.0.100"
3225
+ version = "2.0.101"
3224
3226
  source = "registry+https://github.com/rust-lang/crates.io-index"
3225
- checksum = "b09a44accad81e1ba1cd74a32461ba89dee89095ba17b32f5d03683b1b1fc2a0"
3227
+ checksum = "8ce2b7fc941b3a24138a0a7cf8e858bfc6a992e7978a068a5c760deb0ed43caf"
3226
3228
  dependencies = [
3227
3229
  "proc-macro2",
3228
3230
  "quote",
@@ -3240,13 +3242,13 @@ dependencies = [
3240
3242
 
3241
3243
  [[package]]
3242
3244
  name = "synstructure"
3243
- version = "0.13.1"
3245
+ version = "0.13.2"
3244
3246
  source = "registry+https://github.com/rust-lang/crates.io-index"
3245
- checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971"
3247
+ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2"
3246
3248
  dependencies = [
3247
3249
  "proc-macro2",
3248
3250
  "quote",
3249
- "syn 2.0.100",
3251
+ "syn 2.0.101",
3250
3252
  ]
3251
3253
 
3252
3254
  [[package]]
@@ -3278,7 +3280,7 @@ dependencies = [
3278
3280
  "fastrand",
3279
3281
  "getrandom 0.3.2",
3280
3282
  "once_cell",
3281
- "rustix 1.0.5",
3283
+ "rustix 1.0.7",
3282
3284
  "windows-sys 0.59.0",
3283
3285
  ]
3284
3286
 
@@ -3317,7 +3319,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
3317
3319
  dependencies = [
3318
3320
  "proc-macro2",
3319
3321
  "quote",
3320
- "syn 2.0.100",
3322
+ "syn 2.0.101",
3321
3323
  ]
3322
3324
 
3323
3325
  [[package]]
@@ -3328,7 +3330,7 @@ checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d"
3328
3330
  dependencies = [
3329
3331
  "proc-macro2",
3330
3332
  "quote",
3331
- "syn 2.0.100",
3333
+ "syn 2.0.101",
3332
3334
  ]
3333
3335
 
3334
3336
  [[package]]
@@ -3425,7 +3427,7 @@ checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8"
3425
3427
  dependencies = [
3426
3428
  "proc-macro2",
3427
3429
  "quote",
3428
- "syn 2.0.100",
3430
+ "syn 2.0.101",
3429
3431
  ]
3430
3432
 
3431
3433
  [[package]]
@@ -3463,9 +3465,9 @@ dependencies = [
3463
3465
 
3464
3466
  [[package]]
3465
3467
  name = "tokio-util"
3466
- version = "0.7.14"
3468
+ version = "0.7.15"
3467
3469
  source = "registry+https://github.com/rust-lang/crates.io-index"
3468
- checksum = "6b9590b93e6fcc1739458317cccd391ad3955e2bde8913edf6f95f9e65a8f034"
3470
+ checksum = "66a539a9ad6d5d281510d5bd368c973d636c02dbf8a67300bfb6b950696ad7df"
3469
3471
  dependencies = [
3470
3472
  "bytes",
3471
3473
  "futures-core",
@@ -3535,7 +3537,7 @@ checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d"
3535
3537
  dependencies = [
3536
3538
  "proc-macro2",
3537
3539
  "quote",
3538
- "syn 2.0.100",
3540
+ "syn 2.0.101",
3539
3541
  ]
3540
3542
 
3541
3543
  [[package]]
@@ -3795,7 +3797,7 @@ dependencies = [
3795
3797
  "log",
3796
3798
  "proc-macro2",
3797
3799
  "quote",
3798
- "syn 2.0.100",
3800
+ "syn 2.0.101",
3799
3801
  "wasm-bindgen-shared",
3800
3802
  ]
3801
3803
 
@@ -3830,7 +3832,7 @@ checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de"
3830
3832
  dependencies = [
3831
3833
  "proc-macro2",
3832
3834
  "quote",
3833
- "syn 2.0.100",
3835
+ "syn 2.0.101",
3834
3836
  "wasm-bindgen-backend",
3835
3837
  "wasm-bindgen-shared",
3836
3838
  ]
@@ -3879,9 +3881,9 @@ dependencies = [
3879
3881
 
3880
3882
  [[package]]
3881
3883
  name = "webpki-roots"
3882
- version = "0.26.8"
3884
+ version = "0.26.10"
3883
3885
  source = "registry+https://github.com/rust-lang/crates.io-index"
3884
- checksum = "2210b291f7ea53617fbafcc4939f10914214ec15aace5ba62293a668f322c5c9"
3886
+ checksum = "37493cadf42a2a939ed404698ded7fb378bf301b5011f973361779a3a74f8c93"
3885
3887
  dependencies = [
3886
3888
  "rustls-pki-types",
3887
3889
  ]
@@ -3972,7 +3974,7 @@ checksum = "9107ddc059d5b6fbfbffdfa7a7fe3e22a226def0b2608f72e9d552763d3e1ad7"
3972
3974
  dependencies = [
3973
3975
  "proc-macro2",
3974
3976
  "quote",
3975
- "syn 2.0.100",
3977
+ "syn 2.0.101",
3976
3978
  ]
3977
3979
 
3978
3980
  [[package]]
@@ -3983,7 +3985,7 @@ checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836"
3983
3985
  dependencies = [
3984
3986
  "proc-macro2",
3985
3987
  "quote",
3986
- "syn 2.0.100",
3988
+ "syn 2.0.101",
3987
3989
  ]
3988
3990
 
3989
3991
  [[package]]
@@ -3994,7 +3996,7 @@ checksum = "29bee4b38ea3cde66011baa44dba677c432a78593e202392d1e9070cf2a7fca7"
3994
3996
  dependencies = [
3995
3997
  "proc-macro2",
3996
3998
  "quote",
3997
- "syn 2.0.100",
3999
+ "syn 2.0.101",
3998
4000
  ]
3999
4001
 
4000
4002
  [[package]]
@@ -4005,7 +4007,7 @@ checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8"
4005
4007
  dependencies = [
4006
4008
  "proc-macro2",
4007
4009
  "quote",
4008
- "syn 2.0.100",
4010
+ "syn 2.0.101",
4009
4011
  ]
4010
4012
 
4011
4013
  [[package]]
@@ -4341,7 +4343,7 @@ checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154"
4341
4343
  dependencies = [
4342
4344
  "proc-macro2",
4343
4345
  "quote",
4344
- "syn 2.0.100",
4346
+ "syn 2.0.101",
4345
4347
  "synstructure",
4346
4348
  ]
4347
4349
 
@@ -4356,11 +4358,11 @@ dependencies = [
4356
4358
 
4357
4359
  [[package]]
4358
4360
  name = "zerocopy"
4359
- version = "0.8.24"
4361
+ version = "0.8.25"
4360
4362
  source = "registry+https://github.com/rust-lang/crates.io-index"
4361
- checksum = "2586fea28e186957ef732a5f8b3be2da217d65c5969d4b1e17f973ebbe876879"
4363
+ checksum = "a1702d9583232ddb9174e01bb7c15a2ab8fb1bc6f227aa1233858c351a3ba0cb"
4362
4364
  dependencies = [
4363
- "zerocopy-derive 0.8.24",
4365
+ "zerocopy-derive 0.8.25",
4364
4366
  ]
4365
4367
 
4366
4368
  [[package]]
@@ -4371,18 +4373,18 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e"
4371
4373
  dependencies = [
4372
4374
  "proc-macro2",
4373
4375
  "quote",
4374
- "syn 2.0.100",
4376
+ "syn 2.0.101",
4375
4377
  ]
4376
4378
 
4377
4379
  [[package]]
4378
4380
  name = "zerocopy-derive"
4379
- version = "0.8.24"
4381
+ version = "0.8.25"
4380
4382
  source = "registry+https://github.com/rust-lang/crates.io-index"
4381
- checksum = "a996a8f63c5c4448cd959ac1bab0aaa3306ccfd060472f85943ee0750f0169be"
4383
+ checksum = "28a6e20d751156648aa063f3800b706ee209a32c0b4d9f24be3d980b01be55ef"
4382
4384
  dependencies = [
4383
4385
  "proc-macro2",
4384
4386
  "quote",
4385
- "syn 2.0.100",
4387
+ "syn 2.0.101",
4386
4388
  ]
4387
4389
 
4388
4390
  [[package]]
@@ -4402,7 +4404,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502"
4402
4404
  dependencies = [
4403
4405
  "proc-macro2",
4404
4406
  "quote",
4405
- "syn 2.0.100",
4407
+ "syn 2.0.101",
4406
4408
  "synstructure",
4407
4409
  ]
4408
4410
 
@@ -4431,7 +4433,7 @@ checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6"
4431
4433
  dependencies = [
4432
4434
  "proc-macro2",
4433
4435
  "quote",
4434
- "syn 2.0.100",
4436
+ "syn 2.0.101",
4435
4437
  ]
4436
4438
 
4437
4439
  [[package]]
@@ -2,7 +2,7 @@
2
2
  name = "itsi_acme"
3
3
  version = "0.1.0"
4
4
  authors = [
5
- "wouterkem <wc@pico.net.nz>",
5
+ "wouterken <wc@pico.net.nz>",
6
6
  "dignifiedquire <me@dignifiedquire.com>",
7
7
  "Florian Uekermann <florian@uekermann.me>",
8
8
  ]
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "itsi-scheduler"
3
- version = "0.2.15"
3
+ version = "0.2.17"
4
4
  edition = "2021"
5
5
  authors = ["Wouter Coppieters <wc@pico.net.nz>"]
6
6
  license = "MIT"
@@ -3,4 +3,6 @@
3
3
  require "mkmf"
4
4
  require "rb_sys/mkmf"
5
5
 
6
- create_rust_makefile("itsi/scheduler/itsi_scheduler")
6
+ create_rust_makefile("itsi/scheduler/itsi_scheduler") do |r|
7
+ r.extra_rustflags = ["-C target-cpu=native"]
8
+ end
@@ -111,7 +111,7 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0"
111
111
 
112
112
  [[package]]
113
113
  name = "atty"
114
- version = "0.2.15"
114
+ version = "0.2.16"
115
115
  source = "registry+https://github.com/rust-lang/crates.io-index"
116
116
  checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
117
117
  dependencies = [
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "itsi-server"
3
- version = "0.2.15"
3
+ version = "0.2.17"
4
4
  edition = "2021"
5
5
  authors = ["Wouter Coppieters <wc@pico.net.nz>"]
6
6
  license = "MIT"
@@ -90,3 +90,5 @@ argon2 = "0.5.3"
90
90
  core_affinity = "0.8.3"
91
91
  memchr = "2.7.4"
92
92
  quick_cache = "0.6.13"
93
+ smallvec = "1.15.0"
94
+ futures-util = "0.3.31"
@@ -3,4 +3,6 @@
3
3
  require "mkmf"
4
4
  require "rb_sys/mkmf"
5
5
 
6
- create_rust_makefile("itsi/server/itsi_server")
6
+ create_rust_makefile("itsi/server/itsi_server") do |r|
7
+ r.extra_rustflags = ["-C target-cpu=native"]
8
+ end
@@ -1,4 +1,5 @@
1
1
  #![deny(unused_crate_dependencies)]
2
+
2
3
  pub mod default_responses;
3
4
  pub mod env;
4
5
  pub mod prelude;
@@ -57,6 +58,7 @@ fn init(ruby: &Ruby) -> Result<()> {
57
58
  request.define_method("rack_protocol", method!(ItsiHttpRequest::rack_protocol, 0))?;
58
59
  request.define_method("host", method!(ItsiHttpRequest::host, 0))?;
59
60
  request.define_method("headers", method!(ItsiHttpRequest::headers, 0))?;
61
+ request.define_method("each_header", method!(ItsiHttpRequest::each_header, 0))?;
60
62
  request.define_method("uri", method!(ItsiHttpRequest::uri, 0))?;
61
63
  request.define_method("header", method!(ItsiHttpRequest::header, 1))?;
62
64
  request.define_method("[]", method!(ItsiHttpRequest::header, 1))?;
@@ -70,6 +72,7 @@ fn init(ruby: &Ruby) -> Result<()> {
70
72
  request.define_method("url_encoded?", method!(ItsiHttpRequest::is_url_encoded, 0))?;
71
73
  request.define_method("multipart?", method!(ItsiHttpRequest::is_multipart, 0))?;
72
74
  request.define_method("url_params", method!(ItsiHttpRequest::url_params, 0))?;
75
+ request.define_method("server_error", method!(ItsiHttpRequest::error, 1))?;
73
76
 
74
77
  let body_proxy = ruby.get_inner(&ITSI_BODY_PROXY);
75
78
  body_proxy.define_method("gets", method!(ItsiBodyProxy::gets, 0))?;
@@ -79,6 +82,10 @@ fn init(ruby: &Ruby) -> Result<()> {
79
82
 
80
83
  let response = ruby.get_inner(&ITSI_RESPONSE);
81
84
  response.define_method("[]=", method!(ItsiHttpResponse::add_header, 2))?;
85
+ response.define_method(
86
+ "reserve_headers",
87
+ method!(ItsiHttpResponse::reserve_headers, 1),
88
+ )?;
82
89
  response.define_method("add_header", method!(ItsiHttpResponse::add_header, 2))?;
83
90
  response.define_method("add_headers", method!(ItsiHttpResponse::add_headers, 1))?;
84
91
  response.define_method("status=", method!(ItsiHttpResponse::set_status, 1))?;
@@ -86,7 +93,6 @@ fn init(ruby: &Ruby) -> Result<()> {
86
93
  response.define_method("<<", method!(ItsiHttpResponse::send_frame, 1))?;
87
94
  response.define_method("write", method!(ItsiHttpResponse::send_frame, 1))?;
88
95
  response.define_method("read", method!(ItsiHttpResponse::recv_frame, 0))?;
89
- response.define_method("flush", method!(ItsiHttpResponse::flush, 0))?;
90
96
  response.define_method("closed?", method!(ItsiHttpResponse::is_closed, 0))?;
91
97
  response.define_method(
92
98
  "send_and_close",