itsi 0.2.21 → 0.2.22

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 (86) hide show
  1. checksums.yaml +4 -4
  2. data/Cargo.lock +24 -10
  3. data/Cargo.toml +4 -0
  4. data/Rakefile +4 -0
  5. data/crates/itsi_scheduler/Cargo.toml +1 -1
  6. data/crates/itsi_server/Cargo.toml +1 -1
  7. data/crates/itsi_server/src/server/signal.rs +7 -5
  8. data/gems/scheduler/Cargo.lock +516 -3984
  9. data/gems/scheduler/Cargo.toml +4 -0
  10. data/gems/scheduler/Gemfile +11 -0
  11. data/gems/scheduler/Rakefile +21 -6
  12. data/gems/scheduler/itsi-scheduler.gemspec +5 -1
  13. data/gems/scheduler/lib/itsi/scheduler/native_extension.rb +34 -0
  14. data/gems/scheduler/lib/itsi/scheduler/version.rb +1 -1
  15. data/gems/scheduler/lib/itsi/scheduler.rb +1 -1
  16. data/gems/scheduler/test/test_block_unblock.rb +1 -1
  17. data/gems/scheduler/vendor/rb-sys-build/.cargo-ok +1 -0
  18. data/gems/scheduler/vendor/rb-sys-build/.cargo_vcs_info.json +6 -0
  19. data/gems/scheduler/vendor/rb-sys-build/Cargo.lock +294 -0
  20. data/gems/scheduler/vendor/rb-sys-build/Cargo.toml +71 -0
  21. data/gems/scheduler/vendor/rb-sys-build/Cargo.toml.orig +32 -0
  22. data/gems/scheduler/vendor/rb-sys-build/LICENSE-APACHE +190 -0
  23. data/gems/scheduler/vendor/rb-sys-build/LICENSE-MIT +21 -0
  24. data/gems/scheduler/vendor/rb-sys-build/src/bindings/sanitizer.rs +185 -0
  25. data/gems/scheduler/vendor/rb-sys-build/src/bindings/stable_api.rs +247 -0
  26. data/gems/scheduler/vendor/rb-sys-build/src/bindings/wrapper.h +71 -0
  27. data/gems/scheduler/vendor/rb-sys-build/src/bindings.rs +280 -0
  28. data/gems/scheduler/vendor/rb-sys-build/src/cc.rs +421 -0
  29. data/gems/scheduler/vendor/rb-sys-build/src/lib.rs +12 -0
  30. data/gems/scheduler/vendor/rb-sys-build/src/rb_config/flags.rs +101 -0
  31. data/gems/scheduler/vendor/rb-sys-build/src/rb_config/library.rs +132 -0
  32. data/gems/scheduler/vendor/rb-sys-build/src/rb_config/search_path.rs +57 -0
  33. data/gems/scheduler/vendor/rb-sys-build/src/rb_config.rs +906 -0
  34. data/gems/scheduler/vendor/rb-sys-build/src/utils.rs +53 -0
  35. data/gems/server/Cargo.lock +24 -37
  36. data/gems/server/Cargo.toml +4 -0
  37. data/gems/server/Gemfile +23 -0
  38. data/gems/server/Rakefile +39 -7
  39. data/gems/server/itsi-server.gemspec +5 -1
  40. data/gems/server/lib/itsi/server/native_extension.rb +34 -0
  41. data/gems/server/lib/itsi/server/version.rb +1 -1
  42. data/gems/server/lib/itsi/server.rb +10 -2
  43. data/gems/server/test/rack/test_rack_server.rb +14 -2
  44. data/gems/server/vendor/rb-sys-build/.cargo-ok +1 -0
  45. data/gems/server/vendor/rb-sys-build/.cargo_vcs_info.json +6 -0
  46. data/gems/server/vendor/rb-sys-build/Cargo.lock +294 -0
  47. data/gems/server/vendor/rb-sys-build/Cargo.toml +71 -0
  48. data/gems/server/vendor/rb-sys-build/Cargo.toml.orig +32 -0
  49. data/gems/server/vendor/rb-sys-build/LICENSE-APACHE +190 -0
  50. data/gems/server/vendor/rb-sys-build/LICENSE-MIT +21 -0
  51. data/gems/server/vendor/rb-sys-build/src/bindings/sanitizer.rs +185 -0
  52. data/gems/server/vendor/rb-sys-build/src/bindings/stable_api.rs +247 -0
  53. data/gems/server/vendor/rb-sys-build/src/bindings/wrapper.h +71 -0
  54. data/gems/server/vendor/rb-sys-build/src/bindings.rs +280 -0
  55. data/gems/server/vendor/rb-sys-build/src/cc.rs +421 -0
  56. data/gems/server/vendor/rb-sys-build/src/lib.rs +12 -0
  57. data/gems/server/vendor/rb-sys-build/src/rb_config/flags.rs +101 -0
  58. data/gems/server/vendor/rb-sys-build/src/rb_config/library.rs +132 -0
  59. data/gems/server/vendor/rb-sys-build/src/rb_config/search_path.rs +57 -0
  60. data/gems/server/vendor/rb-sys-build/src/rb_config.rs +906 -0
  61. data/gems/server/vendor/rb-sys-build/src/utils.rs +53 -0
  62. data/lib/itsi/version.rb +1 -1
  63. data/script/ci/resolve_version.rb +32 -0
  64. data/script/ci/set_version.rb +53 -0
  65. data/script/ci/setup_cibuildgem_rake_compiler.sh +63 -0
  66. data/script/ci/smoke_scheduler.rb +24 -0
  67. data/script/ci/smoke_server.rb +38 -0
  68. data/vendor/rb-sys-build/.cargo-ok +1 -0
  69. data/vendor/rb-sys-build/.cargo_vcs_info.json +6 -0
  70. data/vendor/rb-sys-build/Cargo.lock +294 -0
  71. data/vendor/rb-sys-build/Cargo.toml +71 -0
  72. data/vendor/rb-sys-build/Cargo.toml.orig +32 -0
  73. data/vendor/rb-sys-build/LICENSE-APACHE +190 -0
  74. data/vendor/rb-sys-build/LICENSE-MIT +21 -0
  75. data/vendor/rb-sys-build/src/bindings/sanitizer.rs +185 -0
  76. data/vendor/rb-sys-build/src/bindings/stable_api.rs +247 -0
  77. data/vendor/rb-sys-build/src/bindings/wrapper.h +71 -0
  78. data/vendor/rb-sys-build/src/bindings.rs +280 -0
  79. data/vendor/rb-sys-build/src/cc.rs +421 -0
  80. data/vendor/rb-sys-build/src/lib.rs +12 -0
  81. data/vendor/rb-sys-build/src/rb_config/flags.rs +101 -0
  82. data/vendor/rb-sys-build/src/rb_config/library.rs +132 -0
  83. data/vendor/rb-sys-build/src/rb_config/search_path.rs +57 -0
  84. data/vendor/rb-sys-build/src/rb_config.rs +906 -0
  85. data/vendor/rb-sys-build/src/utils.rs +53 -0
  86. metadata +68 -5
@@ -0,0 +1,53 @@
1
+ use crate::debug_log;
2
+
3
+ /// Check if current platform is mswin.
4
+ pub fn is_msvc() -> bool {
5
+ if let Ok(target) = std::env::var("TARGET") {
6
+ target.contains("msvc")
7
+ } else {
8
+ false
9
+ }
10
+ }
11
+
12
+ /// Check if current platform is mswin or mingw.
13
+ pub fn is_mswin_or_mingw() -> bool {
14
+ if let Ok(target) = std::env::var("TARGET") {
15
+ target.contains("msvc") || target.contains("pc-windows-gnu")
16
+ } else {
17
+ false
18
+ }
19
+ }
20
+
21
+ /// Splits shell words.
22
+ pub fn shellsplit<S: AsRef<str>>(s: S) -> Vec<String> {
23
+ let s = s.as_ref();
24
+ match shell_words::split(s) {
25
+ Ok(v) => v,
26
+ Err(e) => {
27
+ debug_log!("WARN: shellsplit failed: {}", e);
28
+ s.split_whitespace().map(Into::into).collect()
29
+ }
30
+ }
31
+ }
32
+
33
+ #[macro_export]
34
+ macro_rules! memoize {
35
+ ($type:ty: $val:expr) => {{
36
+ static INIT: std::sync::Once = std::sync::Once::new();
37
+ static mut VALUE: Option<$type> = None;
38
+ #[allow(static_mut_refs)]
39
+ unsafe {
40
+ INIT.call_once(|| {
41
+ VALUE = Some($val);
42
+ });
43
+ VALUE.as_ref().unwrap()
44
+ }
45
+ }};
46
+ }
47
+
48
+ #[macro_export]
49
+ macro_rules! debug_log {
50
+ ($($arg:tt)*) => {
51
+ eprintln!($($arg)*);
52
+ };
53
+ }
@@ -270,7 +270,7 @@ version = "0.28.2"
270
270
  source = "registry+https://github.com/rust-lang/crates.io-index"
271
271
  checksum = "bfa9b6986f250236c27e5a204062434a773a13243d2ffc2955f37bdba4c5c6a1"
272
272
  dependencies = [
273
- "bindgen",
273
+ "bindgen 0.69.5",
274
274
  "cc",
275
275
  "cmake",
276
276
  "dunce",
@@ -427,6 +427,24 @@ dependencies = [
427
427
  "which",
428
428
  ]
429
429
 
430
+ [[package]]
431
+ name = "bindgen"
432
+ version = "0.72.1"
433
+ source = "registry+https://github.com/rust-lang/crates.io-index"
434
+ checksum = "993776b509cfb49c750f11b8f07a46fa23e0a1386ffc01fb1e7d343efc387895"
435
+ dependencies = [
436
+ "bitflags 2.9.0",
437
+ "cexpr",
438
+ "clang-sys",
439
+ "itertools",
440
+ "proc-macro2",
441
+ "quote",
442
+ "regex",
443
+ "rustc-hash 2.1.1",
444
+ "shlex",
445
+ "syn 2.0.101",
446
+ ]
447
+
430
448
  [[package]]
431
449
  name = "bitflags"
432
450
  version = "1.3.2"
@@ -660,7 +678,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
660
678
  checksum = "117725a109d387c937a1533ce01b450cbde6b88abceea8473c4d7a85853cda3c"
661
679
  dependencies = [
662
680
  "lazy_static",
663
- "windows-sys 0.59.0",
681
+ "windows-sys 0.48.0",
664
682
  ]
665
683
 
666
684
  [[package]]
@@ -1642,24 +1660,6 @@ version = "1.0.15"
1642
1660
  source = "registry+https://github.com/rust-lang/crates.io-index"
1643
1661
  checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
1644
1662
 
1645
- [[package]]
1646
- name = "itsi-scheduler"
1647
- version = "0.2.21"
1648
- dependencies = [
1649
- "bytes",
1650
- "derive_more",
1651
- "itsi_error",
1652
- "itsi_instrument_entry",
1653
- "itsi_rb_helpers",
1654
- "itsi_tracing",
1655
- "magnus",
1656
- "mio",
1657
- "nix",
1658
- "parking_lot",
1659
- "rb-sys",
1660
- "tracing",
1661
- ]
1662
-
1663
1663
  [[package]]
1664
1664
  name = "itsi-server"
1665
1665
  version = "0.2.21"
@@ -1772,15 +1772,6 @@ dependencies = [
1772
1772
  "thiserror 2.0.12",
1773
1773
  ]
1774
1774
 
1775
- [[package]]
1776
- name = "itsi_instrument_entry"
1777
- version = "0.1.0"
1778
- dependencies = [
1779
- "proc-macro2",
1780
- "quote",
1781
- "syn 1.0.109",
1782
- ]
1783
-
1784
1775
  [[package]]
1785
1776
  name = "itsi_rb_helpers"
1786
1777
  version = "0.1.0"
@@ -1934,8 +1925,7 @@ checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94"
1934
1925
  [[package]]
1935
1926
  name = "magnus"
1936
1927
  version = "0.8.2"
1937
- source = "registry+https://github.com/rust-lang/crates.io-index"
1938
- checksum = "3b36a5b126bbe97eb0d02d07acfeb327036c6319fd816139a49824a83b7f9012"
1928
+ source = "git+https://github.com/matsadler/magnus.git?rev=1ed232edb2b75a2eed9b1def34ad57e55c411a5c#1ed232edb2b75a2eed9b1def34ad57e55c411a5c"
1939
1929
  dependencies = [
1940
1930
  "bytes",
1941
1931
  "magnus-macros",
@@ -1947,8 +1937,7 @@ dependencies = [
1947
1937
  [[package]]
1948
1938
  name = "magnus-macros"
1949
1939
  version = "0.8.0"
1950
- source = "registry+https://github.com/rust-lang/crates.io-index"
1951
- checksum = "47607461fd8e1513cb4f2076c197d8092d921a1ea75bd08af97398f593751892"
1940
+ source = "git+https://github.com/matsadler/magnus.git?rev=1ed232edb2b75a2eed9b1def34ad57e55c411a5c#1ed232edb2b75a2eed9b1def34ad57e55c411a5c"
1952
1941
  dependencies = [
1953
1942
  "proc-macro2",
1954
1943
  "quote",
@@ -2591,10 +2580,8 @@ dependencies = [
2591
2580
  [[package]]
2592
2581
  name = "rb-sys-build"
2593
2582
  version = "0.9.124"
2594
- source = "registry+https://github.com/rust-lang/crates.io-index"
2595
- checksum = "568068db4102230882e6d4ae8de6632e224ca75fe5970f6e026a04e91ed635d3"
2596
2583
  dependencies = [
2597
- "bindgen",
2584
+ "bindgen 0.72.1",
2598
2585
  "lazy_static",
2599
2586
  "proc-macro2",
2600
2587
  "quote",
@@ -3922,7 +3909,7 @@ version = "0.1.9"
3922
3909
  source = "registry+https://github.com/rust-lang/crates.io-index"
3923
3910
  checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb"
3924
3911
  dependencies = [
3925
- "windows-sys 0.59.0",
3912
+ "windows-sys 0.48.0",
3926
3913
  ]
3927
3914
 
3928
3915
  [[package]]
@@ -5,3 +5,7 @@
5
5
  [workspace]
6
6
  members = ["./ext/itsi_server"]
7
7
  resolver = "2"
8
+
9
+ [patch.crates-io]
10
+ magnus = { git = "https://github.com/matsadler/magnus.git", rev = "1ed232edb2b75a2eed9b1def34ad57e55c411a5c" }
11
+ rb-sys-build = { path = "vendor/rb-sys-build" }
@@ -0,0 +1,23 @@
1
+ source "https://rubygems.org"
2
+
3
+ gemspec
4
+
5
+ group :development, :test do
6
+ gem "bundler"
7
+ gem "minitest", "~> 5.16"
8
+ gem "rack"
9
+ gem "rackup"
10
+ gem "rake", "~> 13.0"
11
+ gem "rake-compiler"
12
+ gem "rb_sys", "~> 0.9.91"
13
+ end
14
+
15
+ group :server_test do
16
+ gem "grpc"
17
+ end
18
+
19
+ group :server_test_support do
20
+ gem "jwt"
21
+ gem "net_http_unix"
22
+ gem "redis"
23
+ end
data/gems/server/Rakefile CHANGED
@@ -3,15 +3,47 @@
3
3
  require "bundler/gem_tasks"
4
4
  require "minitest/test_task"
5
5
 
6
-
7
- Minitest::TestTask.create(:test) do |t|
8
- t.libs << 'test'
9
- t.libs << 'lib'
10
- t.warning = false
11
- t.test_globs = ['test/**/*.rb']
12
- t.test_prelude = 'require "helpers/test_helper.rb"'
6
+ SMOKE_TEST_GLOBS = %w[
7
+ test/options/bind.rb
8
+ test/options/header_read_timeout.rb
9
+ test/options/test_request_timeout.rb
10
+ test/options/test_threads.rb
11
+ test/rack/test_rack_server.rb
12
+ test/middleware/allow_list.rb
13
+ test/middleware/auth_api_key.rb
14
+ test/middleware/auth_basic.rb
15
+ test/middleware/cache_control.rb
16
+ test/middleware/cidr_to_regex.rb
17
+ test/middleware/compression.rb
18
+ test/middleware/cors.rb
19
+ test/middleware/csp.rb
20
+ test/middleware/deny_list.rb
21
+ test/middleware/etag.rb
22
+ test/middleware/header_interpolation.rb
23
+ test/middleware/location.rb
24
+ test/middleware/max_body.rb
25
+ test/middleware/request_headers.rb
26
+ test/middleware/response_headers.rb
27
+ test/middleware/static_assets.rb
28
+ test/middleware/static_response.rb
29
+ test/middleware/string_rewrite.rb
30
+ ].freeze
31
+
32
+ def configure_test_task(task_name, test_globs)
33
+ Minitest::TestTask.create(task_name) do |t|
34
+ t.libs << "test"
35
+ t.libs << "lib"
36
+ t.warning = false
37
+ t.test_globs = test_globs
38
+ t.test_prelude = 'require "helpers/test_helper.rb"'
39
+ end
13
40
  end
14
41
 
42
+ configure_test_task(:test, ["test/**/*.rb"])
43
+ configure_test_task("test:smoke", SMOKE_TEST_GLOBS)
44
+
45
+ task "test:full" => :test
46
+
15
47
  require "rb_sys/extensiontask"
16
48
 
17
49
  task build: :compile
@@ -29,7 +29,11 @@ Gem::Specification.new do |spec|
29
29
  end
30
30
  end + Dir["../../crates/**/*.{toml,rs,lock,html,json}"].map do |ext_file|
31
31
  "ext/#{ext_file[%r{.*crates/(.*?)$}, 1]}"
32
- end.compact
32
+ end.compact +
33
+ Dir["vendor/rb-sys-build/**/*.{toml,rs,h,lock}"] +
34
+ Dir["vendor/rb-sys-build/LICENSE-*"] +
35
+ Dir.glob("lib/**/*.{rb,bundle,so,dylib,dll}")
36
+ spec.files.uniq!
33
37
 
34
38
  spec.bindir = "exe"
35
39
  spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rbconfig"
4
+
5
+ module Itsi
6
+ class Server
7
+ module NativeExtension
8
+ module_function
9
+
10
+ def require!
11
+ ruby_abi = RUBY_VERSION[/\A\d+\.\d+/]
12
+
13
+ if ruby_abi && versioned_binary_present?(ruby_abi)
14
+ begin
15
+ require_relative "#{ruby_abi}/itsi_server"
16
+ return
17
+ rescue LoadError
18
+ # Fall back to the source-built extension when a packaged binary
19
+ # exists but cannot be loaded on this machine.
20
+ end
21
+ end
22
+
23
+ require_relative "itsi_server"
24
+ end
25
+
26
+ def versioned_binary_present?(ruby_abi)
27
+ binary_path = File.join(__dir__, ruby_abi, "itsi_server.#{RbConfig::CONFIG.fetch("DLEXT")}")
28
+ File.exist?(binary_path)
29
+ end
30
+ end
31
+ end
32
+ end
33
+
34
+ Itsi::Server::NativeExtension.require!
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Itsi
4
4
  class Server
5
- VERSION = "0.2.21"
5
+ VERSION = "0.2.22"
6
6
  end
7
7
  end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative "server/version"
4
- require_relative "server/itsi_server"
4
+ require_relative "server/native_extension"
5
5
  require_relative "server/rack_interface"
6
6
  require_relative "server/grpc/grpc_interface"
7
7
  require_relative "server/grpc/grpc_call"
@@ -87,7 +87,15 @@ module Itsi
87
87
 
88
88
  def stop_background_threads
89
89
  @running && @running.each(&:stop)
90
- @background_threads&.each(&:join)
90
+ @background_threads&.each do |thread|
91
+ next unless thread
92
+
93
+ thread.join(5)
94
+ next unless thread.alive?
95
+
96
+ thread.kill
97
+ thread.join(1)
98
+ end
91
99
  @background_threads = []
92
100
  @running = []
93
101
  end
@@ -302,8 +302,20 @@ class TestRackServer < Minitest::Test
302
302
  )
303
303
  end
304
304
 
305
- sleep 0.25
306
- assert_equal Net::HTTP.get(URI("http://#{host}:#{port}")), "Hello, Rackup!"
305
+ response = nil
306
+
307
+ Timeout.timeout(2) do
308
+ loop do
309
+ begin
310
+ response = Net::HTTP.get(URI("http://#{host}:#{port}"))
311
+ break
312
+ rescue Errno::ECONNREFUSED, Net::OpenTimeout
313
+ sleep 0.05
314
+ end
315
+ end
316
+ end
317
+
318
+ assert_equal "Hello, Rackup!", response
307
319
  Process.kill(:SIGINT, Process.pid)
308
320
  end
309
321
 
@@ -0,0 +1 @@
1
+ {"v":1}
@@ -0,0 +1,6 @@
1
+ {
2
+ "git": {
3
+ "sha1": "8b8369748af0e3fa80d20e11b38b423cb2009bdf"
4
+ },
5
+ "path_in_vcs": "crates/rb-sys-build"
6
+ }
@@ -0,0 +1,294 @@
1
+ # This file is automatically @generated by Cargo.
2
+ # It is not intended for manual editing.
3
+ version = 3
4
+
5
+ [[package]]
6
+ name = "aho-corasick"
7
+ version = "1.1.3"
8
+ source = "registry+https://github.com/rust-lang/crates.io-index"
9
+ checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916"
10
+ dependencies = [
11
+ "memchr",
12
+ ]
13
+
14
+ [[package]]
15
+ name = "bindgen"
16
+ version = "0.69.4"
17
+ source = "registry+https://github.com/rust-lang/crates.io-index"
18
+ checksum = "a00dc851838a2120612785d195287475a3ac45514741da670b735818822129a0"
19
+ dependencies = [
20
+ "bitflags",
21
+ "cexpr",
22
+ "clang-sys",
23
+ "itertools",
24
+ "lazy_static",
25
+ "lazycell",
26
+ "proc-macro2",
27
+ "quote",
28
+ "regex",
29
+ "rustc-hash",
30
+ "shlex",
31
+ "syn",
32
+ ]
33
+
34
+ [[package]]
35
+ name = "bitflags"
36
+ version = "2.6.0"
37
+ source = "registry+https://github.com/rust-lang/crates.io-index"
38
+ checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de"
39
+
40
+ [[package]]
41
+ name = "cexpr"
42
+ version = "0.6.0"
43
+ source = "registry+https://github.com/rust-lang/crates.io-index"
44
+ checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766"
45
+ dependencies = [
46
+ "nom",
47
+ ]
48
+
49
+ [[package]]
50
+ name = "cfg-if"
51
+ version = "1.0.0"
52
+ source = "registry+https://github.com/rust-lang/crates.io-index"
53
+ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
54
+
55
+ [[package]]
56
+ name = "clang-sys"
57
+ version = "1.8.1"
58
+ source = "registry+https://github.com/rust-lang/crates.io-index"
59
+ checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4"
60
+ dependencies = [
61
+ "glob",
62
+ "libc",
63
+ "libloading",
64
+ ]
65
+
66
+ [[package]]
67
+ name = "either"
68
+ version = "1.13.0"
69
+ source = "registry+https://github.com/rust-lang/crates.io-index"
70
+ checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0"
71
+
72
+ [[package]]
73
+ name = "glob"
74
+ version = "0.3.1"
75
+ source = "registry+https://github.com/rust-lang/crates.io-index"
76
+ checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
77
+
78
+ [[package]]
79
+ name = "itertools"
80
+ version = "0.12.1"
81
+ source = "registry+https://github.com/rust-lang/crates.io-index"
82
+ checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569"
83
+ dependencies = [
84
+ "either",
85
+ ]
86
+
87
+ [[package]]
88
+ name = "lazy_static"
89
+ version = "1.5.0"
90
+ source = "registry+https://github.com/rust-lang/crates.io-index"
91
+ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
92
+
93
+ [[package]]
94
+ name = "lazycell"
95
+ version = "1.3.0"
96
+ source = "registry+https://github.com/rust-lang/crates.io-index"
97
+ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
98
+
99
+ [[package]]
100
+ name = "libc"
101
+ version = "0.2.155"
102
+ source = "registry+https://github.com/rust-lang/crates.io-index"
103
+ checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c"
104
+
105
+ [[package]]
106
+ name = "libloading"
107
+ version = "0.8.5"
108
+ source = "registry+https://github.com/rust-lang/crates.io-index"
109
+ checksum = "4979f22fdb869068da03c9f7528f8297c6fd2606bc3a4affe42e6a823fdb8da4"
110
+ dependencies = [
111
+ "cfg-if",
112
+ "windows-targets",
113
+ ]
114
+
115
+ [[package]]
116
+ name = "memchr"
117
+ version = "2.7.4"
118
+ source = "registry+https://github.com/rust-lang/crates.io-index"
119
+ checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3"
120
+
121
+ [[package]]
122
+ name = "minimal-lexical"
123
+ version = "0.2.1"
124
+ source = "registry+https://github.com/rust-lang/crates.io-index"
125
+ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
126
+
127
+ [[package]]
128
+ name = "nom"
129
+ version = "7.1.3"
130
+ source = "registry+https://github.com/rust-lang/crates.io-index"
131
+ checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
132
+ dependencies = [
133
+ "memchr",
134
+ "minimal-lexical",
135
+ ]
136
+
137
+ [[package]]
138
+ name = "proc-macro2"
139
+ version = "1.0.103"
140
+ source = "registry+https://github.com/rust-lang/crates.io-index"
141
+ checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8"
142
+ dependencies = [
143
+ "unicode-ident",
144
+ ]
145
+
146
+ [[package]]
147
+ name = "quote"
148
+ version = "1.0.42"
149
+ source = "registry+https://github.com/rust-lang/crates.io-index"
150
+ checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f"
151
+ dependencies = [
152
+ "proc-macro2",
153
+ ]
154
+
155
+ [[package]]
156
+ name = "rb-sys-build"
157
+ version = "0.9.124"
158
+ dependencies = [
159
+ "bindgen",
160
+ "lazy_static",
161
+ "proc-macro2",
162
+ "quote",
163
+ "regex",
164
+ "shell-words",
165
+ "syn",
166
+ ]
167
+
168
+ [[package]]
169
+ name = "regex"
170
+ version = "1.12.2"
171
+ source = "registry+https://github.com/rust-lang/crates.io-index"
172
+ checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4"
173
+ dependencies = [
174
+ "aho-corasick",
175
+ "memchr",
176
+ "regex-automata",
177
+ "regex-syntax",
178
+ ]
179
+
180
+ [[package]]
181
+ name = "regex-automata"
182
+ version = "0.4.13"
183
+ source = "registry+https://github.com/rust-lang/crates.io-index"
184
+ checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c"
185
+ dependencies = [
186
+ "aho-corasick",
187
+ "memchr",
188
+ "regex-syntax",
189
+ ]
190
+
191
+ [[package]]
192
+ name = "regex-syntax"
193
+ version = "0.8.5"
194
+ source = "registry+https://github.com/rust-lang/crates.io-index"
195
+ checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"
196
+
197
+ [[package]]
198
+ name = "rustc-hash"
199
+ version = "1.1.0"
200
+ source = "registry+https://github.com/rust-lang/crates.io-index"
201
+ checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
202
+
203
+ [[package]]
204
+ name = "shell-words"
205
+ version = "1.1.0"
206
+ source = "registry+https://github.com/rust-lang/crates.io-index"
207
+ checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde"
208
+
209
+ [[package]]
210
+ name = "shlex"
211
+ version = "1.3.0"
212
+ source = "registry+https://github.com/rust-lang/crates.io-index"
213
+ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
214
+
215
+ [[package]]
216
+ name = "syn"
217
+ version = "2.0.111"
218
+ source = "registry+https://github.com/rust-lang/crates.io-index"
219
+ checksum = "390cc9a294ab71bdb1aa2e99d13be9c753cd2d7bd6560c77118597410c4d2e87"
220
+ dependencies = [
221
+ "proc-macro2",
222
+ "quote",
223
+ "unicode-ident",
224
+ ]
225
+
226
+ [[package]]
227
+ name = "unicode-ident"
228
+ version = "1.0.12"
229
+ source = "registry+https://github.com/rust-lang/crates.io-index"
230
+ checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
231
+
232
+ [[package]]
233
+ name = "windows-targets"
234
+ version = "0.52.6"
235
+ source = "registry+https://github.com/rust-lang/crates.io-index"
236
+ checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
237
+ dependencies = [
238
+ "windows_aarch64_gnullvm",
239
+ "windows_aarch64_msvc",
240
+ "windows_i686_gnu",
241
+ "windows_i686_gnullvm",
242
+ "windows_i686_msvc",
243
+ "windows_x86_64_gnu",
244
+ "windows_x86_64_gnullvm",
245
+ "windows_x86_64_msvc",
246
+ ]
247
+
248
+ [[package]]
249
+ name = "windows_aarch64_gnullvm"
250
+ version = "0.52.6"
251
+ source = "registry+https://github.com/rust-lang/crates.io-index"
252
+ checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
253
+
254
+ [[package]]
255
+ name = "windows_aarch64_msvc"
256
+ version = "0.52.6"
257
+ source = "registry+https://github.com/rust-lang/crates.io-index"
258
+ checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
259
+
260
+ [[package]]
261
+ name = "windows_i686_gnu"
262
+ version = "0.52.6"
263
+ source = "registry+https://github.com/rust-lang/crates.io-index"
264
+ checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
265
+
266
+ [[package]]
267
+ name = "windows_i686_gnullvm"
268
+ version = "0.52.6"
269
+ source = "registry+https://github.com/rust-lang/crates.io-index"
270
+ checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
271
+
272
+ [[package]]
273
+ name = "windows_i686_msvc"
274
+ version = "0.52.6"
275
+ source = "registry+https://github.com/rust-lang/crates.io-index"
276
+ checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
277
+
278
+ [[package]]
279
+ name = "windows_x86_64_gnu"
280
+ version = "0.52.6"
281
+ source = "registry+https://github.com/rust-lang/crates.io-index"
282
+ checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
283
+
284
+ [[package]]
285
+ name = "windows_x86_64_gnullvm"
286
+ version = "0.52.6"
287
+ source = "registry+https://github.com/rust-lang/crates.io-index"
288
+ checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
289
+
290
+ [[package]]
291
+ name = "windows_x86_64_msvc"
292
+ version = "0.52.6"
293
+ source = "registry+https://github.com/rust-lang/crates.io-index"
294
+ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"