itsi-server 0.1.1 → 0.1.18

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 (184) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +5 -0
  3. data/CODE_OF_CONDUCT.md +7 -0
  4. data/Cargo.lock +3937 -0
  5. data/Cargo.toml +7 -0
  6. data/README.md +4 -0
  7. data/Rakefile +8 -1
  8. data/_index.md +6 -0
  9. data/exe/itsi +141 -46
  10. data/ext/itsi_error/Cargo.toml +3 -0
  11. data/ext/itsi_error/src/lib.rs +98 -24
  12. data/ext/itsi_error/target/debug/build/clang-sys-da71b0344e568175/out/common.rs +355 -0
  13. data/ext/itsi_error/target/debug/build/clang-sys-da71b0344e568175/out/dynamic.rs +276 -0
  14. data/ext/itsi_error/target/debug/build/clang-sys-da71b0344e568175/out/macros.rs +49 -0
  15. data/ext/itsi_error/target/debug/build/rb-sys-49f554618693db24/out/bindings-0.9.110-mri-arm64-darwin23-3.4.2.rs +8865 -0
  16. data/ext/itsi_error/target/debug/incremental/itsi_error-1mmt5sux7jb0i/s-h510z7m8v9-0bxu7yd.lock +0 -0
  17. data/ext/itsi_error/target/debug/incremental/itsi_error-2vn3jey74oiw0/s-h5113n0e7e-1v5qzs6.lock +0 -0
  18. data/ext/itsi_error/target/debug/incremental/itsi_error-37uv9dicz7awp/s-h510ykifhe-0tbnep2.lock +0 -0
  19. data/ext/itsi_error/target/debug/incremental/itsi_error-37uv9dicz7awp/s-h510yyocpj-0tz7ug7.lock +0 -0
  20. data/ext/itsi_error/target/debug/incremental/itsi_error-37uv9dicz7awp/s-h510z0xc8g-14ol18k.lock +0 -0
  21. data/ext/itsi_error/target/debug/incremental/itsi_error-3g5qf4y7d54uj/s-h5113n0e7d-1trk8on.lock +0 -0
  22. data/ext/itsi_error/target/debug/incremental/itsi_error-3lpfftm45d3e2/s-h510z7m8r3-1pxp20o.lock +0 -0
  23. data/ext/itsi_error/target/debug/incremental/itsi_error-3o4qownhl3d7n/s-h510ykifek-1uxasnk.lock +0 -0
  24. data/ext/itsi_error/target/debug/incremental/itsi_error-3o4qownhl3d7n/s-h510yyocki-11u37qm.lock +0 -0
  25. data/ext/itsi_error/target/debug/incremental/itsi_error-3o4qownhl3d7n/s-h510z0xc93-0pmy0zm.lock +0 -0
  26. data/ext/itsi_instrument_entry/Cargo.toml +15 -0
  27. data/ext/itsi_instrument_entry/src/lib.rs +31 -0
  28. data/ext/itsi_rb_helpers/Cargo.toml +3 -0
  29. data/ext/itsi_rb_helpers/src/heap_value.rs +139 -0
  30. data/ext/itsi_rb_helpers/src/lib.rs +140 -10
  31. data/ext/itsi_rb_helpers/target/debug/build/clang-sys-da71b0344e568175/out/common.rs +355 -0
  32. data/ext/itsi_rb_helpers/target/debug/build/clang-sys-da71b0344e568175/out/dynamic.rs +276 -0
  33. data/ext/itsi_rb_helpers/target/debug/build/clang-sys-da71b0344e568175/out/macros.rs +49 -0
  34. data/ext/itsi_rb_helpers/target/debug/build/rb-sys-eb9ed4ff3a60f995/out/bindings-0.9.110-mri-arm64-darwin23-3.4.2.rs +8865 -0
  35. data/ext/itsi_rb_helpers/target/debug/incremental/itsi_rb_helpers-040pxg6yhb3g3/s-h5113n7a1b-03bwlt4.lock +0 -0
  36. data/ext/itsi_rb_helpers/target/debug/incremental/itsi_rb_helpers-131g1u4dzkt1a/s-h51113xnh3-1eik1ip.lock +0 -0
  37. data/ext/itsi_rb_helpers/target/debug/incremental/itsi_rb_helpers-131g1u4dzkt1a/s-h5111704jj-0g4rj8x.lock +0 -0
  38. data/ext/itsi_rb_helpers/target/debug/incremental/itsi_rb_helpers-1q2d3drtxrzs5/s-h5113n79yl-0bxcqc5.lock +0 -0
  39. data/ext/itsi_rb_helpers/target/debug/incremental/itsi_rb_helpers-374a9h7ovycj0/s-h51113xoox-10de2hp.lock +0 -0
  40. data/ext/itsi_rb_helpers/target/debug/incremental/itsi_rb_helpers-374a9h7ovycj0/s-h5111704w7-0vdq7gq.lock +0 -0
  41. data/ext/itsi_scheduler/Cargo.toml +24 -0
  42. data/ext/itsi_scheduler/src/itsi_scheduler/io_helpers.rs +56 -0
  43. data/ext/itsi_scheduler/src/itsi_scheduler/io_waiter.rs +44 -0
  44. data/ext/itsi_scheduler/src/itsi_scheduler/timer.rs +44 -0
  45. data/ext/itsi_scheduler/src/itsi_scheduler.rs +308 -0
  46. data/ext/itsi_scheduler/src/lib.rs +38 -0
  47. data/ext/itsi_server/Cargo.lock +2956 -0
  48. data/ext/itsi_server/Cargo.toml +72 -14
  49. data/ext/itsi_server/extconf.rb +1 -1
  50. data/ext/itsi_server/src/default_responses/html/401.html +68 -0
  51. data/ext/itsi_server/src/default_responses/html/403.html +68 -0
  52. data/ext/itsi_server/src/default_responses/html/404.html +68 -0
  53. data/ext/itsi_server/src/default_responses/html/413.html +71 -0
  54. data/ext/itsi_server/src/default_responses/html/429.html +68 -0
  55. data/ext/itsi_server/src/default_responses/html/500.html +71 -0
  56. data/ext/itsi_server/src/default_responses/html/502.html +71 -0
  57. data/ext/itsi_server/src/default_responses/html/503.html +68 -0
  58. data/ext/itsi_server/src/default_responses/html/504.html +69 -0
  59. data/ext/itsi_server/src/default_responses/html/index.html +238 -0
  60. data/ext/itsi_server/src/default_responses/json/401.json +6 -0
  61. data/ext/itsi_server/src/default_responses/json/403.json +6 -0
  62. data/ext/itsi_server/src/default_responses/json/404.json +6 -0
  63. data/ext/itsi_server/src/default_responses/json/413.json +6 -0
  64. data/ext/itsi_server/src/default_responses/json/429.json +6 -0
  65. data/ext/itsi_server/src/default_responses/json/500.json +6 -0
  66. data/ext/itsi_server/src/default_responses/json/502.json +6 -0
  67. data/ext/itsi_server/src/default_responses/json/503.json +6 -0
  68. data/ext/itsi_server/src/default_responses/json/504.json +6 -0
  69. data/ext/itsi_server/src/default_responses/mod.rs +11 -0
  70. data/ext/itsi_server/src/env.rs +43 -0
  71. data/ext/itsi_server/src/lib.rs +132 -40
  72. data/ext/itsi_server/src/prelude.rs +2 -0
  73. data/ext/itsi_server/src/ruby_types/itsi_body_proxy/big_bytes.rs +109 -0
  74. data/ext/itsi_server/src/ruby_types/itsi_body_proxy/mod.rs +143 -0
  75. data/ext/itsi_server/src/ruby_types/itsi_grpc_call.rs +344 -0
  76. data/ext/itsi_server/src/ruby_types/itsi_grpc_response_stream/mod.rs +264 -0
  77. data/ext/itsi_server/src/ruby_types/itsi_http_request.rs +345 -0
  78. data/ext/itsi_server/src/ruby_types/itsi_http_response.rs +391 -0
  79. data/ext/itsi_server/src/ruby_types/itsi_server/file_watcher.rs +225 -0
  80. data/ext/itsi_server/src/ruby_types/itsi_server/itsi_server_config.rs +375 -0
  81. data/ext/itsi_server/src/ruby_types/itsi_server.rs +83 -0
  82. data/ext/itsi_server/src/ruby_types/mod.rs +48 -0
  83. data/ext/itsi_server/src/server/binds/bind.rs +201 -0
  84. data/ext/itsi_server/src/server/binds/bind_protocol.rs +37 -0
  85. data/ext/itsi_server/src/server/binds/listener.rs +432 -0
  86. data/ext/itsi_server/src/server/binds/mod.rs +4 -0
  87. data/ext/itsi_server/src/server/binds/tls/locked_dir_cache.rs +132 -0
  88. data/ext/itsi_server/src/server/binds/tls.rs +270 -0
  89. data/ext/itsi_server/src/server/byte_frame.rs +32 -0
  90. data/ext/itsi_server/src/server/http_message_types.rs +97 -0
  91. data/ext/itsi_server/src/server/io_stream.rs +105 -0
  92. data/ext/itsi_server/src/server/lifecycle_event.rs +12 -0
  93. data/ext/itsi_server/src/server/middleware_stack/middleware.rs +165 -0
  94. data/ext/itsi_server/src/server/middleware_stack/middlewares/allow_list.rs +56 -0
  95. data/ext/itsi_server/src/server/middleware_stack/middlewares/auth_api_key.rs +87 -0
  96. data/ext/itsi_server/src/server/middleware_stack/middlewares/auth_basic.rs +86 -0
  97. data/ext/itsi_server/src/server/middleware_stack/middlewares/auth_jwt.rs +285 -0
  98. data/ext/itsi_server/src/server/middleware_stack/middlewares/cache_control.rs +142 -0
  99. data/ext/itsi_server/src/server/middleware_stack/middlewares/compression.rs +289 -0
  100. data/ext/itsi_server/src/server/middleware_stack/middlewares/cors.rs +292 -0
  101. data/ext/itsi_server/src/server/middleware_stack/middlewares/deny_list.rs +55 -0
  102. data/ext/itsi_server/src/server/middleware_stack/middlewares/error_response/default_responses.rs +190 -0
  103. data/ext/itsi_server/src/server/middleware_stack/middlewares/error_response.rs +157 -0
  104. data/ext/itsi_server/src/server/middleware_stack/middlewares/etag.rs +195 -0
  105. data/ext/itsi_server/src/server/middleware_stack/middlewares/header_interpretation.rs +82 -0
  106. data/ext/itsi_server/src/server/middleware_stack/middlewares/intrusion_protection.rs +201 -0
  107. data/ext/itsi_server/src/server/middleware_stack/middlewares/log_requests.rs +82 -0
  108. data/ext/itsi_server/src/server/middleware_stack/middlewares/max_body.rs +47 -0
  109. data/ext/itsi_server/src/server/middleware_stack/middlewares/mod.rs +87 -0
  110. data/ext/itsi_server/src/server/middleware_stack/middlewares/proxy.rs +414 -0
  111. data/ext/itsi_server/src/server/middleware_stack/middlewares/rate_limit.rs +131 -0
  112. data/ext/itsi_server/src/server/middleware_stack/middlewares/redirect.rs +76 -0
  113. data/ext/itsi_server/src/server/middleware_stack/middlewares/request_headers.rs +44 -0
  114. data/ext/itsi_server/src/server/middleware_stack/middlewares/response_headers.rs +36 -0
  115. data/ext/itsi_server/src/server/middleware_stack/middlewares/ruby_app.rs +126 -0
  116. data/ext/itsi_server/src/server/middleware_stack/middlewares/static_assets.rs +180 -0
  117. data/ext/itsi_server/src/server/middleware_stack/middlewares/static_response.rs +55 -0
  118. data/ext/itsi_server/src/server/middleware_stack/middlewares/string_rewrite.rs +163 -0
  119. data/ext/itsi_server/src/server/middleware_stack/middlewares/token_source.rs +12 -0
  120. data/ext/itsi_server/src/server/middleware_stack/mod.rs +347 -0
  121. data/ext/itsi_server/src/server/mod.rs +12 -5
  122. data/ext/itsi_server/src/server/process_worker.rs +247 -0
  123. data/ext/itsi_server/src/server/request_job.rs +11 -0
  124. data/ext/itsi_server/src/server/serve_strategy/cluster_mode.rs +342 -0
  125. data/ext/itsi_server/src/server/serve_strategy/mod.rs +30 -0
  126. data/ext/itsi_server/src/server/serve_strategy/single_mode.rs +421 -0
  127. data/ext/itsi_server/src/server/signal.rs +76 -0
  128. data/ext/itsi_server/src/server/size_limited_incoming.rs +101 -0
  129. data/ext/itsi_server/src/server/thread_worker.rs +475 -0
  130. data/ext/itsi_server/src/services/cache_store.rs +74 -0
  131. data/ext/itsi_server/src/services/itsi_http_service.rs +239 -0
  132. data/ext/itsi_server/src/services/mime_types.rs +1416 -0
  133. data/ext/itsi_server/src/services/mod.rs +6 -0
  134. data/ext/itsi_server/src/services/password_hasher.rs +83 -0
  135. data/ext/itsi_server/src/services/rate_limiter.rs +569 -0
  136. data/ext/itsi_server/src/services/static_file_server.rs +1324 -0
  137. data/ext/itsi_tracing/Cargo.toml +5 -0
  138. data/ext/itsi_tracing/src/lib.rs +315 -7
  139. data/ext/itsi_tracing/target/debug/incremental/itsi_tracing-0994n8rpvvt9m/s-h510hfz1f6-1kbycmq.lock +0 -0
  140. data/ext/itsi_tracing/target/debug/incremental/itsi_tracing-0bob7bf4yq34i/s-h5113125h5-0lh4rag.lock +0 -0
  141. data/ext/itsi_tracing/target/debug/incremental/itsi_tracing-2fcodulrxbbxo/s-h510h2infk-0hp5kjw.lock +0 -0
  142. data/ext/itsi_tracing/target/debug/incremental/itsi_tracing-2iak63r1woi1l/s-h510h2in4q-0kxfzw1.lock +0 -0
  143. data/ext/itsi_tracing/target/debug/incremental/itsi_tracing-2kk4qj9gn5dg2/s-h5113124kv-0enwon2.lock +0 -0
  144. data/ext/itsi_tracing/target/debug/incremental/itsi_tracing-2mwo0yas7dtw4/s-h510hfz1ha-1udgpei.lock +0 -0
  145. data/lib/itsi/http_request/response_status_shortcodes.rb +74 -0
  146. data/lib/itsi/http_request.rb +186 -0
  147. data/lib/itsi/http_response.rb +41 -0
  148. data/lib/itsi/passfile.rb +109 -0
  149. data/lib/itsi/server/config/dsl.rb +565 -0
  150. data/lib/itsi/server/config.rb +166 -0
  151. data/lib/itsi/server/default_app/default_app.rb +34 -0
  152. data/lib/itsi/server/default_app/index.html +115 -0
  153. data/lib/itsi/server/default_config/Itsi-rackup.rb +119 -0
  154. data/lib/itsi/server/default_config/Itsi.rb +107 -0
  155. data/lib/itsi/server/grpc/grpc_call.rb +246 -0
  156. data/lib/itsi/server/grpc/grpc_interface.rb +100 -0
  157. data/lib/itsi/server/grpc/reflection/v1/reflection_pb.rb +26 -0
  158. data/lib/itsi/server/grpc/reflection/v1/reflection_services_pb.rb +122 -0
  159. data/lib/itsi/server/rack/handler/itsi.rb +27 -0
  160. data/lib/itsi/server/rack_interface.rb +94 -0
  161. data/lib/itsi/server/route_tester.rb +107 -0
  162. data/lib/itsi/server/scheduler_interface.rb +21 -0
  163. data/lib/itsi/server/scheduler_mode.rb +10 -0
  164. data/lib/itsi/server/signal_trap.rb +29 -0
  165. data/lib/itsi/server/typed_handlers/param_parser.rb +200 -0
  166. data/lib/itsi/server/typed_handlers/source_parser.rb +55 -0
  167. data/lib/itsi/server/typed_handlers.rb +17 -0
  168. data/lib/itsi/server/version.rb +1 -1
  169. data/lib/itsi/server.rb +160 -9
  170. data/lib/itsi/standard_headers.rb +86 -0
  171. data/lib/ruby_lsp/itsi/addon.rb +111 -0
  172. data/lib/shell_completions/completions.rb +26 -0
  173. metadata +182 -25
  174. data/ext/itsi_server/src/request/itsi_request.rs +0 -143
  175. data/ext/itsi_server/src/request/mod.rs +0 -1
  176. data/ext/itsi_server/src/server/bind.rs +0 -138
  177. data/ext/itsi_server/src/server/itsi_ca/itsi_ca.crt +0 -32
  178. data/ext/itsi_server/src/server/itsi_ca/itsi_ca.key +0 -52
  179. data/ext/itsi_server/src/server/itsi_server.rs +0 -182
  180. data/ext/itsi_server/src/server/listener.rs +0 -218
  181. data/ext/itsi_server/src/server/tls.rs +0 -138
  182. data/ext/itsi_server/src/server/transfer_protocol.rs +0 -23
  183. data/ext/itsi_server/src/stream_writer/mod.rs +0 -21
  184. data/lib/itsi/request.rb +0 -39
@@ -0,0 +1,86 @@
1
+ module Itsi
2
+ module StandardHeaders
3
+ ALL = [
4
+ ACCEPT = "accept",
5
+ ACCEPT_CHARSET = "accept-charset",
6
+ ACCEPT_ENCODING = "accept-encoding",
7
+ ACCEPT_LANGUAGE = "accept-language",
8
+ ACCEPT_RANGES = "accept-ranges",
9
+ ACCESS_CONTROL_ALLOW_CREDENTIALS = "access-control-allow-credentials",
10
+ ACCESS_CONTROL_ALLOW_HEADERS = "access-control-allow-headers",
11
+ ACCESS_CONTROL_ALLOW_METHODS = "access-control-allow-methods",
12
+ ACCESS_CONTROL_ALLOW_ORIGIN = "access-control-allow-origin",
13
+ ACCESS_CONTROL_EXPOSE_HEADERS = "access-control-expose-headers",
14
+ ACCESS_CONTROL_MAX_AGE = "access-control-max-age",
15
+ ACCESS_CONTROL_REQUEST_HEADERS = "access-control-request-headers",
16
+ ACCESS_CONTROL_REQUEST_METHOD = "access-control-request-method",
17
+ AGE = "age",
18
+ ALLOW = "allow",
19
+ ALT_SVC = "alt-svc",
20
+ AUTHORIZATION = "authorization",
21
+ CACHE_CONTROL = "cache-control",
22
+ CACHE_STATUS = "cache-status",
23
+ CDN_CACHE_CONTROL = "cdn-cache-control",
24
+ CONNECTION = "connection",
25
+ CONTENT_DISPOSITION = "content-disposition",
26
+ CONTENT_ENCODING = "content-encoding",
27
+ CONTENT_LANGUAGE = "content-language",
28
+ CONTENT_LENGTH = "content-length",
29
+ CONTENT_LOCATION = "content-location",
30
+ CONTENT_RANGE = "content-range",
31
+ CONTENT_SECURITY_POLICY_REPORT_ONLY = "content-security-policy-report-only",
32
+ CONTENT_TYPE = "content-type",
33
+ COOKIE = "cookie",
34
+ DNT = "dnt",
35
+ DATE = "date",
36
+ ETAG = "etag",
37
+ EXPECT = "expect",
38
+ EXPIRES = "expires",
39
+ FORWARDED = "forwarded",
40
+ FROM = "from",
41
+ HOST = "host",
42
+ IF_MATCH = "if-match",
43
+ IF_MODIFIED_SINCE = "if-modified-since",
44
+ IF_NONE_MATCH = "if-none-match",
45
+ IF_RANGE = "if-range",
46
+ IF_UNMODIFIED_SINCE = "if-unmodified-since",
47
+ LAST_MODIFIED = "last-modified",
48
+ LINK = "link",
49
+ LOCATION = "location",
50
+ MAX_FORWARDS = "max-forwards",
51
+ ORIGIN = "origin",
52
+ PRAGMA = "pragma",
53
+ PROXY_AUTHENTICATE = "proxy-authenticate",
54
+ PROXY_AUTHORIZATION = "proxy-authorization",
55
+ PUBLIC_KEY_PINS = "public-key-pins",
56
+ PUBLIC_KEY_PINS_REPORT_ONLY = "public-key-pins-report-only",
57
+ RANGE = "range",
58
+ REFERER = "referer",
59
+ REFERRER_POLICY = "referrer-policy",
60
+ REFRESH = "refresh",
61
+ RETRY_AFTER = "retry-after",
62
+ SEC_WEBSOCKET_ACCEPT = "sec-websocket-accept",
63
+ SEC_WEBSOCKET_EXTENSIONS = "sec-websocket-extensions",
64
+ SEC_WEBSOCKET_KEY = "sec-websocket-key",
65
+ SEC_WEBSOCKET_PROTOCOL = "sec-websocket-protocol",
66
+ SEC_WEBSOCKET_VERSION = "sec-websocket-version",
67
+ SERVER = "server",
68
+ SET_COOKIE = "set-cookie",
69
+ STRICT_TRANSPORT_SECURITY = "strict-transport-security",
70
+ TE = "te",
71
+ TRAILER = "trailer",
72
+ TRANSFER_ENCODING = "transfer-encoding",
73
+ USER_AGENT = "user-agent",
74
+ UPGRADE = "upgrade",
75
+ UPGRADE_INSECURE_REQUESTS = "upgrade-insecure-requests",
76
+ VARY = "vary",
77
+ VIA = "via",
78
+ WARNING = "warning",
79
+ WWW_AUTHENTICATE = "www-authenticate",
80
+ X_CONTENT_TYPE_OPTIONS = "x-content-type-options",
81
+ X_DNS_PREFETCH_CONTROL = "x-dns-prefetch-control",
82
+ X_FRAME_OPTIONS = "x-frame-options",
83
+ X_XSS_PROTECTION = "x-xss-protection",
84
+ ]
85
+ end
86
+ end
@@ -0,0 +1,111 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "ruby_lsp/addon"
4
+ puts "Here we go"
5
+ module RubyLsp
6
+ module Itsi
7
+ class Addon < ::RubyLsp::Addon
8
+
9
+ def name
10
+ "Ruby LSP Itsi"
11
+ end
12
+
13
+ def version
14
+ "0.1.0"
15
+ end
16
+
17
+ def create_completion_listener(response_builder, node_context, dispatcher, uri)
18
+ return unless uri.to_s.end_with?("Itsi.rb")
19
+ @in_itsi_file = true
20
+ CompletionListener.new(response_builder, node_context, dispatcher, uri)
21
+ end
22
+
23
+ def create_hover_listener(response_builder, node_context, dispatcher)
24
+ hl = dispatcher.listeners[:on_call_node_enter].find{|c| c.kind_of?(RubyLsp::Listeners::Hover)}
25
+
26
+ return unless hl.instance_variable_get("@path").to_s.end_with?("Itsi.rb")
27
+ HoverListener.new(response_builder, node_context, dispatcher)
28
+ end
29
+ end
30
+
31
+ class HoverListener
32
+ def initialize(response_builder, node_context, dispatcher)
33
+ @response_builder = response_builder
34
+ @node_context = node_context
35
+ @dispatcher = dispatcher
36
+
37
+ # Register for call nodes (you could also use other events if more appropriate)
38
+ dispatcher.register(self, :on_call_node_enter)
39
+ end
40
+
41
+ def on_call_node_enter(node)
42
+ # Check if this is the call for foo_bar; you might add additional logic if needed.
43
+ case node.message
44
+ when "log_level"
45
+ # Push a simple hover response.
46
+ @response_builder.push(
47
+ "Method **log_level**: A method that takes a single parameter `a`.",
48
+ category: :documentation
49
+ )
50
+ when "shutdown_timeout"
51
+ # Push a simple hover response.
52
+ @response_builder.push(
53
+ "Method **shutdown_timeout**: Number of seconds to wait for a graceful shutdown before forcefully shutting down.",
54
+ category: :documentation
55
+ )
56
+ when "log"
57
+ # Push a simple hover response.
58
+ @response_builder.push(
59
+ "Method **log**: A method that takes a single parameter `a`.",
60
+ category: :documentation
61
+ )
62
+ end
63
+ end
64
+ end
65
+
66
+ class CompletionListener
67
+ def initialize(response_builder, node_context, dispatcher, uri)
68
+ @response_builder = response_builder
69
+ @node_context = node_context
70
+ @uri = uri
71
+ @dispatcher = dispatcher
72
+
73
+ # Register for call nodes to handle method completions
74
+ dispatcher.register(self, :on_call_node_enter)
75
+ end
76
+
77
+ def on_call_node_enter(node)
78
+ # Only handle method calls that are being typed (no arguments yet)
79
+ return unless node.arguments.nil?
80
+ puts "Adding log level completion"
81
+ # Add our completion item
82
+ @response_builder << Interface::CompletionItem.new(
83
+ label: "log_level",
84
+ kind: Constant::CompletionItemKind::METHOD,
85
+ detail: "log_level a ",
86
+ documentation: "A method that takes a single parameter 'a'",
87
+ insert_text: "log_level ${1|:info,:debug,:warn,:error|}",
88
+ insert_text_format: Constant::InsertTextFormat::SNIPPET,
89
+ )
90
+
91
+ @response_builder << Interface::CompletionItem.new(
92
+ label: "bind",
93
+ kind: Constant::CompletionItemKind::METHOD,
94
+ detail: "Bind to an interface",
95
+ documentation: "A method that takes a single parameter 'a'",
96
+ insert_text: "bind ${1|'https://0.0.0.0','http://0.0.0.0','http://0.0.0.0:3000','https://0.0.0.0:3000','http://127.0.0.1','https://127.0.0.1'|}",
97
+ insert_text_format: Constant::InsertTextFormat::SNIPPET,
98
+ )
99
+
100
+ @response_builder << Interface::CompletionItem.new(
101
+ label: "log_format",
102
+ kind: Constant::CompletionItemKind::METHOD,
103
+ detail: "log_format",
104
+ documentation: "A method that takes a single parameter 'a'",
105
+ insert_text: "log_format ${1|:plain,:json,:auto|}",
106
+ insert_text_format: Constant::InsertTextFormat::SNIPPET,
107
+ )
108
+ end
109
+ end
110
+ end
111
+ end
@@ -0,0 +1,26 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ if ARGV.include?('--install-completions')
4
+ # Try to get the next argument as the shell name.
5
+ shell = ARGV[ARGV.index('--install-completions') + 1] rescue nil
6
+ # Fallback: use the basename of the SHELL environment variable
7
+ shell ||= File.basename(ENV['SHELL'] || '')
8
+
9
+ case shell.downcase
10
+ when 'bash'
11
+ # Bash completion script
12
+ puts 'complete -W "$(itsi --completion)" itsi'
13
+ when 'zsh'
14
+ puts <<~ZSH
15
+ _itsi() {
16
+ local completions
17
+ completions=("${(@f)$(itsi --completion)}")
18
+ compadd -- $completions
19
+ }
20
+ compdef _itsi itsi
21
+ ZSH
22
+ else
23
+ warn "Unsupported shell: #{shell}. Please specify 'bash' or 'zsh'."
24
+ end
25
+ exit
26
+ end
metadata CHANGED
@@ -1,28 +1,42 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: itsi-server
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.18
5
5
  platform: ruby
6
6
  authors:
7
7
  - Wouter Coppieters
8
8
  bindir: exe
9
9
  cert_chain: []
10
- date: 2025-03-01 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
- name: libclang
13
+ name: rack
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: '1.6'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: '1.6'
26
+ - !ruby/object:Gem::Dependency
27
+ name: json
14
28
  requirement: !ruby/object:Gem::Requirement
15
29
  requirements:
16
30
  - - "~>"
17
31
  - !ruby/object:Gem::Version
18
- version: '14.0'
32
+ version: '2'
19
33
  type: :runtime
20
34
  prerelease: false
21
35
  version_requirements: !ruby/object:Gem::Requirement
22
36
  requirements:
23
37
  - - "~>"
24
38
  - !ruby/object:Gem::Version
25
- version: '14.0'
39
+ version: '2'
26
40
  - !ruby/object:Gem::Dependency
27
41
  name: rb_sys
28
42
  requirement: !ruby/object:Gem::Requirement
@@ -38,19 +52,19 @@ dependencies:
38
52
  - !ruby/object:Gem::Version
39
53
  version: 0.9.91
40
54
  - !ruby/object:Gem::Dependency
41
- name: rack
55
+ name: ruby-lsp
42
56
  requirement: !ruby/object:Gem::Requirement
43
57
  requirements:
44
- - - "~>"
58
+ - - ">="
45
59
  - !ruby/object:Gem::Version
46
- version: '2'
47
- type: :runtime
60
+ version: '0'
61
+ type: :development
48
62
  prerelease: false
49
63
  version_requirements: !ruby/object:Gem::Requirement
50
64
  requirements:
51
- - - "~>"
65
+ - - ">="
52
66
  - !ruby/object:Gem::Version
53
- version: '2'
67
+ version: '0'
54
68
  description: Itsi Server - A light-weight Rack Server implementation for Ruby
55
69
  email:
56
70
  - wc@pico.net.nz
@@ -63,36 +77,179 @@ files:
63
77
  - ".rubocop.yml"
64
78
  - CHANGELOG.md
65
79
  - CODE_OF_CONDUCT.md
80
+ - Cargo.lock
81
+ - Cargo.toml
66
82
  - LICENSE.txt
67
83
  - README.md
68
84
  - Rakefile
85
+ - _index.md
69
86
  - exe/itsi
70
87
  - ext/itsi_error/Cargo.lock
71
88
  - ext/itsi_error/Cargo.toml
72
89
  - ext/itsi_error/src/lib.rs
90
+ - ext/itsi_error/target/debug/build/clang-sys-da71b0344e568175/out/common.rs
91
+ - ext/itsi_error/target/debug/build/clang-sys-da71b0344e568175/out/dynamic.rs
92
+ - ext/itsi_error/target/debug/build/clang-sys-da71b0344e568175/out/macros.rs
93
+ - ext/itsi_error/target/debug/build/rb-sys-49f554618693db24/out/bindings-0.9.110-mri-arm64-darwin23-3.4.2.rs
94
+ - ext/itsi_error/target/debug/incremental/itsi_error-1mmt5sux7jb0i/s-h510z7m8v9-0bxu7yd.lock
95
+ - ext/itsi_error/target/debug/incremental/itsi_error-2vn3jey74oiw0/s-h5113n0e7e-1v5qzs6.lock
96
+ - ext/itsi_error/target/debug/incremental/itsi_error-37uv9dicz7awp/s-h510ykifhe-0tbnep2.lock
97
+ - ext/itsi_error/target/debug/incremental/itsi_error-37uv9dicz7awp/s-h510yyocpj-0tz7ug7.lock
98
+ - ext/itsi_error/target/debug/incremental/itsi_error-37uv9dicz7awp/s-h510z0xc8g-14ol18k.lock
99
+ - ext/itsi_error/target/debug/incremental/itsi_error-3g5qf4y7d54uj/s-h5113n0e7d-1trk8on.lock
100
+ - ext/itsi_error/target/debug/incremental/itsi_error-3lpfftm45d3e2/s-h510z7m8r3-1pxp20o.lock
101
+ - ext/itsi_error/target/debug/incremental/itsi_error-3o4qownhl3d7n/s-h510ykifek-1uxasnk.lock
102
+ - ext/itsi_error/target/debug/incremental/itsi_error-3o4qownhl3d7n/s-h510yyocki-11u37qm.lock
103
+ - ext/itsi_error/target/debug/incremental/itsi_error-3o4qownhl3d7n/s-h510z0xc93-0pmy0zm.lock
104
+ - ext/itsi_instrument_entry/Cargo.toml
105
+ - ext/itsi_instrument_entry/src/lib.rs
73
106
  - ext/itsi_rb_helpers/Cargo.lock
74
107
  - ext/itsi_rb_helpers/Cargo.toml
108
+ - ext/itsi_rb_helpers/src/heap_value.rs
75
109
  - ext/itsi_rb_helpers/src/lib.rs
110
+ - ext/itsi_rb_helpers/target/debug/build/clang-sys-da71b0344e568175/out/common.rs
111
+ - ext/itsi_rb_helpers/target/debug/build/clang-sys-da71b0344e568175/out/dynamic.rs
112
+ - ext/itsi_rb_helpers/target/debug/build/clang-sys-da71b0344e568175/out/macros.rs
113
+ - ext/itsi_rb_helpers/target/debug/build/rb-sys-eb9ed4ff3a60f995/out/bindings-0.9.110-mri-arm64-darwin23-3.4.2.rs
114
+ - ext/itsi_rb_helpers/target/debug/incremental/itsi_rb_helpers-040pxg6yhb3g3/s-h5113n7a1b-03bwlt4.lock
115
+ - ext/itsi_rb_helpers/target/debug/incremental/itsi_rb_helpers-131g1u4dzkt1a/s-h51113xnh3-1eik1ip.lock
116
+ - ext/itsi_rb_helpers/target/debug/incremental/itsi_rb_helpers-131g1u4dzkt1a/s-h5111704jj-0g4rj8x.lock
117
+ - ext/itsi_rb_helpers/target/debug/incremental/itsi_rb_helpers-1q2d3drtxrzs5/s-h5113n79yl-0bxcqc5.lock
118
+ - ext/itsi_rb_helpers/target/debug/incremental/itsi_rb_helpers-374a9h7ovycj0/s-h51113xoox-10de2hp.lock
119
+ - ext/itsi_rb_helpers/target/debug/incremental/itsi_rb_helpers-374a9h7ovycj0/s-h5111704w7-0vdq7gq.lock
120
+ - ext/itsi_scheduler/Cargo.toml
121
+ - ext/itsi_scheduler/src/itsi_scheduler.rs
122
+ - ext/itsi_scheduler/src/itsi_scheduler/io_helpers.rs
123
+ - ext/itsi_scheduler/src/itsi_scheduler/io_waiter.rs
124
+ - ext/itsi_scheduler/src/itsi_scheduler/timer.rs
125
+ - ext/itsi_scheduler/src/lib.rs
126
+ - ext/itsi_server/Cargo.lock
76
127
  - ext/itsi_server/Cargo.toml
77
128
  - ext/itsi_server/extconf.rb
129
+ - ext/itsi_server/src/default_responses/html/401.html
130
+ - ext/itsi_server/src/default_responses/html/403.html
131
+ - ext/itsi_server/src/default_responses/html/404.html
132
+ - ext/itsi_server/src/default_responses/html/413.html
133
+ - ext/itsi_server/src/default_responses/html/429.html
134
+ - ext/itsi_server/src/default_responses/html/500.html
135
+ - ext/itsi_server/src/default_responses/html/502.html
136
+ - ext/itsi_server/src/default_responses/html/503.html
137
+ - ext/itsi_server/src/default_responses/html/504.html
138
+ - ext/itsi_server/src/default_responses/html/index.html
139
+ - ext/itsi_server/src/default_responses/json/401.json
140
+ - ext/itsi_server/src/default_responses/json/403.json
141
+ - ext/itsi_server/src/default_responses/json/404.json
142
+ - ext/itsi_server/src/default_responses/json/413.json
143
+ - ext/itsi_server/src/default_responses/json/429.json
144
+ - ext/itsi_server/src/default_responses/json/500.json
145
+ - ext/itsi_server/src/default_responses/json/502.json
146
+ - ext/itsi_server/src/default_responses/json/503.json
147
+ - ext/itsi_server/src/default_responses/json/504.json
148
+ - ext/itsi_server/src/default_responses/mod.rs
149
+ - ext/itsi_server/src/env.rs
78
150
  - ext/itsi_server/src/lib.rs
79
- - ext/itsi_server/src/request/itsi_request.rs
80
- - ext/itsi_server/src/request/mod.rs
81
- - ext/itsi_server/src/server/bind.rs
82
- - ext/itsi_server/src/server/itsi_ca/itsi_ca.crt
83
- - ext/itsi_server/src/server/itsi_ca/itsi_ca.key
84
- - ext/itsi_server/src/server/itsi_server.rs
85
- - ext/itsi_server/src/server/listener.rs
151
+ - ext/itsi_server/src/prelude.rs
152
+ - ext/itsi_server/src/ruby_types/itsi_body_proxy/big_bytes.rs
153
+ - ext/itsi_server/src/ruby_types/itsi_body_proxy/mod.rs
154
+ - ext/itsi_server/src/ruby_types/itsi_grpc_call.rs
155
+ - ext/itsi_server/src/ruby_types/itsi_grpc_response_stream/mod.rs
156
+ - ext/itsi_server/src/ruby_types/itsi_http_request.rs
157
+ - ext/itsi_server/src/ruby_types/itsi_http_response.rs
158
+ - ext/itsi_server/src/ruby_types/itsi_server.rs
159
+ - ext/itsi_server/src/ruby_types/itsi_server/file_watcher.rs
160
+ - ext/itsi_server/src/ruby_types/itsi_server/itsi_server_config.rs
161
+ - ext/itsi_server/src/ruby_types/mod.rs
162
+ - ext/itsi_server/src/server/binds/bind.rs
163
+ - ext/itsi_server/src/server/binds/bind_protocol.rs
164
+ - ext/itsi_server/src/server/binds/listener.rs
165
+ - ext/itsi_server/src/server/binds/mod.rs
166
+ - ext/itsi_server/src/server/binds/tls.rs
167
+ - ext/itsi_server/src/server/binds/tls/locked_dir_cache.rs
168
+ - ext/itsi_server/src/server/byte_frame.rs
169
+ - ext/itsi_server/src/server/http_message_types.rs
170
+ - ext/itsi_server/src/server/io_stream.rs
171
+ - ext/itsi_server/src/server/lifecycle_event.rs
172
+ - ext/itsi_server/src/server/middleware_stack/middleware.rs
173
+ - ext/itsi_server/src/server/middleware_stack/middlewares/allow_list.rs
174
+ - ext/itsi_server/src/server/middleware_stack/middlewares/auth_api_key.rs
175
+ - ext/itsi_server/src/server/middleware_stack/middlewares/auth_basic.rs
176
+ - ext/itsi_server/src/server/middleware_stack/middlewares/auth_jwt.rs
177
+ - ext/itsi_server/src/server/middleware_stack/middlewares/cache_control.rs
178
+ - ext/itsi_server/src/server/middleware_stack/middlewares/compression.rs
179
+ - ext/itsi_server/src/server/middleware_stack/middlewares/cors.rs
180
+ - ext/itsi_server/src/server/middleware_stack/middlewares/deny_list.rs
181
+ - ext/itsi_server/src/server/middleware_stack/middlewares/error_response.rs
182
+ - ext/itsi_server/src/server/middleware_stack/middlewares/error_response/default_responses.rs
183
+ - ext/itsi_server/src/server/middleware_stack/middlewares/etag.rs
184
+ - ext/itsi_server/src/server/middleware_stack/middlewares/header_interpretation.rs
185
+ - ext/itsi_server/src/server/middleware_stack/middlewares/intrusion_protection.rs
186
+ - ext/itsi_server/src/server/middleware_stack/middlewares/log_requests.rs
187
+ - ext/itsi_server/src/server/middleware_stack/middlewares/max_body.rs
188
+ - ext/itsi_server/src/server/middleware_stack/middlewares/mod.rs
189
+ - ext/itsi_server/src/server/middleware_stack/middlewares/proxy.rs
190
+ - ext/itsi_server/src/server/middleware_stack/middlewares/rate_limit.rs
191
+ - ext/itsi_server/src/server/middleware_stack/middlewares/redirect.rs
192
+ - ext/itsi_server/src/server/middleware_stack/middlewares/request_headers.rs
193
+ - ext/itsi_server/src/server/middleware_stack/middlewares/response_headers.rs
194
+ - ext/itsi_server/src/server/middleware_stack/middlewares/ruby_app.rs
195
+ - ext/itsi_server/src/server/middleware_stack/middlewares/static_assets.rs
196
+ - ext/itsi_server/src/server/middleware_stack/middlewares/static_response.rs
197
+ - ext/itsi_server/src/server/middleware_stack/middlewares/string_rewrite.rs
198
+ - ext/itsi_server/src/server/middleware_stack/middlewares/token_source.rs
199
+ - ext/itsi_server/src/server/middleware_stack/mod.rs
86
200
  - ext/itsi_server/src/server/mod.rs
87
- - ext/itsi_server/src/server/tls.rs
88
- - ext/itsi_server/src/server/transfer_protocol.rs
89
- - ext/itsi_server/src/stream_writer/mod.rs
201
+ - ext/itsi_server/src/server/process_worker.rs
202
+ - ext/itsi_server/src/server/request_job.rs
203
+ - ext/itsi_server/src/server/serve_strategy/cluster_mode.rs
204
+ - ext/itsi_server/src/server/serve_strategy/mod.rs
205
+ - ext/itsi_server/src/server/serve_strategy/single_mode.rs
206
+ - ext/itsi_server/src/server/signal.rs
207
+ - ext/itsi_server/src/server/size_limited_incoming.rs
208
+ - ext/itsi_server/src/server/thread_worker.rs
209
+ - ext/itsi_server/src/services/cache_store.rs
210
+ - ext/itsi_server/src/services/itsi_http_service.rs
211
+ - ext/itsi_server/src/services/mime_types.rs
212
+ - ext/itsi_server/src/services/mod.rs
213
+ - ext/itsi_server/src/services/password_hasher.rs
214
+ - ext/itsi_server/src/services/rate_limiter.rs
215
+ - ext/itsi_server/src/services/static_file_server.rs
90
216
  - ext/itsi_tracing/Cargo.lock
91
217
  - ext/itsi_tracing/Cargo.toml
92
218
  - ext/itsi_tracing/src/lib.rs
93
- - lib/itsi/request.rb
219
+ - ext/itsi_tracing/target/debug/incremental/itsi_tracing-0994n8rpvvt9m/s-h510hfz1f6-1kbycmq.lock
220
+ - ext/itsi_tracing/target/debug/incremental/itsi_tracing-0bob7bf4yq34i/s-h5113125h5-0lh4rag.lock
221
+ - ext/itsi_tracing/target/debug/incremental/itsi_tracing-2fcodulrxbbxo/s-h510h2infk-0hp5kjw.lock
222
+ - ext/itsi_tracing/target/debug/incremental/itsi_tracing-2iak63r1woi1l/s-h510h2in4q-0kxfzw1.lock
223
+ - ext/itsi_tracing/target/debug/incremental/itsi_tracing-2kk4qj9gn5dg2/s-h5113124kv-0enwon2.lock
224
+ - ext/itsi_tracing/target/debug/incremental/itsi_tracing-2mwo0yas7dtw4/s-h510hfz1ha-1udgpei.lock
225
+ - lib/itsi/http_request.rb
226
+ - lib/itsi/http_request/response_status_shortcodes.rb
227
+ - lib/itsi/http_response.rb
228
+ - lib/itsi/passfile.rb
94
229
  - lib/itsi/server.rb
230
+ - lib/itsi/server/config.rb
231
+ - lib/itsi/server/config/dsl.rb
232
+ - lib/itsi/server/default_app/default_app.rb
233
+ - lib/itsi/server/default_app/index.html
234
+ - lib/itsi/server/default_config/Itsi-rackup.rb
235
+ - lib/itsi/server/default_config/Itsi.rb
236
+ - lib/itsi/server/grpc/grpc_call.rb
237
+ - lib/itsi/server/grpc/grpc_interface.rb
238
+ - lib/itsi/server/grpc/reflection/v1/reflection_pb.rb
239
+ - lib/itsi/server/grpc/reflection/v1/reflection_services_pb.rb
240
+ - lib/itsi/server/rack/handler/itsi.rb
241
+ - lib/itsi/server/rack_interface.rb
242
+ - lib/itsi/server/route_tester.rb
243
+ - lib/itsi/server/scheduler_interface.rb
244
+ - lib/itsi/server/scheduler_mode.rb
245
+ - lib/itsi/server/signal_trap.rb
246
+ - lib/itsi/server/typed_handlers.rb
247
+ - lib/itsi/server/typed_handlers/param_parser.rb
248
+ - lib/itsi/server/typed_handlers/source_parser.rb
95
249
  - lib/itsi/server/version.rb
250
+ - lib/itsi/standard_headers.rb
251
+ - lib/ruby_lsp/itsi/addon.rb
252
+ - lib/shell_completions/completions.rb
96
253
  - sig/itsi_server.rbs
97
254
  homepage: https://itsi.fyi
98
255
  licenses:
@@ -108,14 +265,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
108
265
  requirements:
109
266
  - - ">="
110
267
  - !ruby/object:Gem::Version
111
- version: 3.1.0
268
+ version: 2.7.0
112
269
  required_rubygems_version: !ruby/object:Gem::Requirement
113
270
  requirements:
114
271
  - - ">="
115
272
  - !ruby/object:Gem::Version
116
- version: 3.3.11
273
+ version: '3.1'
117
274
  requirements: []
118
- rubygems_version: 3.6.2
275
+ rubygems_version: 3.6.7
119
276
  specification_version: 4
120
277
  summary: Itsi Server - A light-weight Rack Server implementation for Ruby.
121
278
  test_files: []
@@ -1,143 +0,0 @@
1
- use std::{collections::HashMap, sync::Arc};
2
-
3
- use crate::server::listener::{Listener, SockAddr};
4
- use bytes::Bytes;
5
- use http::request::Parts;
6
- use http_body_util::BodyExt;
7
- use hyper::{body::Incoming, Request};
8
- use magnus::error::Result;
9
-
10
- #[magnus::wrap(class = "Itsi::Request", free_immediately, size)]
11
- #[derive(Debug)]
12
- pub struct ItsiRequest {
13
- pub path: String,
14
- pub script_name: String,
15
- pub query_string: String,
16
- pub method: String,
17
- pub version: String,
18
- pub rack_protocol: Vec<String>,
19
- pub host: String,
20
- pub scheme: String,
21
- pub headers: HashMap<String, String>,
22
- pub remote_addr: String,
23
- pub port: u16,
24
- pub body: Bytes,
25
- pub parts: Parts,
26
- }
27
-
28
- impl ItsiRequest {
29
- pub(crate) async fn build_from(
30
- request: Request<Incoming>,
31
- sock_addr: SockAddr,
32
- script_name: String,
33
- listener: Arc<Listener>,
34
- ) -> Self {
35
- let (parts, body) = request.into_parts();
36
- let method = parts.method.to_string();
37
- let port = parts.uri.port_u16().unwrap_or(listener.port());
38
- let query_string = parts.uri.query().unwrap_or("").to_string();
39
- let rack_protocol = parts
40
- .headers
41
- .get("upgrade")
42
- .or_else(|| parts.headers.get("protocol"))
43
- .map(|value| {
44
- value
45
- .to_str()
46
- .unwrap_or("")
47
- .split(',')
48
- .map(|s| s.trim().to_owned())
49
- .collect::<Vec<String>>()
50
- })
51
- .unwrap_or_else(|| vec!["http".to_string()]);
52
-
53
- let host = parts
54
- .uri
55
- .host()
56
- .map(ToOwned::to_owned)
57
- .unwrap_or_else(|| listener.host());
58
-
59
- let scheme = parts
60
- .uri
61
- .scheme()
62
- .map(|s| s.to_string())
63
- .unwrap_or_else(|| listener.scheme());
64
-
65
- let headers = parts
66
- .headers
67
- .iter()
68
- .map(|(k, v)| (k.to_string(), v.to_str().unwrap_or("").to_string()))
69
- .collect();
70
-
71
- let path = parts
72
- .uri
73
- .path()
74
- .strip_prefix(&script_name)
75
- .unwrap_or(parts.uri.path())
76
- .to_string();
77
-
78
- let version = format!("{:?}", parts.version);
79
- let body = body.collect().await.unwrap().to_bytes();
80
-
81
- Self {
82
- remote_addr: sock_addr.to_string(),
83
- body,
84
- parts,
85
- script_name,
86
- query_string,
87
- method,
88
- headers,
89
- path,
90
- version,
91
- rack_protocol,
92
- host,
93
- scheme,
94
- port,
95
- }
96
- }
97
- }
98
-
99
- impl ItsiRequest {
100
- pub(crate) fn path(&self) -> Result<String> {
101
- Ok(self.path.clone())
102
- }
103
-
104
- pub(crate) fn script_name(&self) -> Result<String> {
105
- Ok(self.script_name.clone())
106
- }
107
-
108
- pub(crate) fn query_string(&self) -> Result<String> {
109
- Ok(self.query_string.clone())
110
- }
111
-
112
- pub(crate) fn method(&self) -> Result<String> {
113
- Ok(self.method.clone())
114
- }
115
-
116
- pub(crate) fn version(&self) -> Result<String> {
117
- Ok(self.version.clone())
118
- }
119
-
120
- pub(crate) fn rack_protocol(&self) -> Result<Vec<String>> {
121
- Ok(self.rack_protocol.clone())
122
- }
123
-
124
- pub(crate) fn host(&self) -> Result<String> {
125
- Ok(self.host.clone())
126
- }
127
-
128
- pub(crate) fn headers(&self) -> Result<HashMap<String, String>> {
129
- Ok(self.headers.clone())
130
- }
131
-
132
- pub(crate) fn remote_addr(&self) -> Result<String> {
133
- Ok(self.remote_addr.clone())
134
- }
135
-
136
- pub(crate) fn port(&self) -> Result<u16> {
137
- Ok(self.port)
138
- }
139
-
140
- pub(crate) fn body(&self) -> Result<Bytes> {
141
- Ok(self.body.clone())
142
- }
143
- }
@@ -1 +0,0 @@
1
- pub mod itsi_request;