itsi-server 0.2.21 → 0.2.23

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 (40) hide show
  1. checksums.yaml +4 -4
  2. data/Cargo.lock +25 -38
  3. data/Cargo.toml +4 -0
  4. data/Rakefile +39 -7
  5. data/ext/itsi_scheduler/Cargo.toml +1 -1
  6. data/ext/itsi_server/Cargo.lock +2 -2
  7. data/ext/itsi_server/Cargo.toml +1 -1
  8. data/ext/itsi_server/src/server/middleware_stack/mod.rs +3 -9
  9. data/ext/itsi_server/src/server/signal.rs +7 -5
  10. data/ext/itsi_server/src/services/itsi_http_service.rs +5 -8
  11. data/lib/itsi/server/native_extension.rb +34 -0
  12. data/lib/itsi/server/version.rb +1 -1
  13. data/lib/itsi/server.rb +10 -2
  14. data/vendor/rb-sys-build/.cargo-ok +1 -0
  15. data/vendor/rb-sys-build/.cargo_vcs_info.json +6 -0
  16. data/vendor/rb-sys-build/Cargo.lock +294 -0
  17. data/vendor/rb-sys-build/Cargo.toml +71 -0
  18. data/vendor/rb-sys-build/Cargo.toml.orig +32 -0
  19. data/vendor/rb-sys-build/LICENSE-APACHE +190 -0
  20. data/vendor/rb-sys-build/LICENSE-MIT +21 -0
  21. data/vendor/rb-sys-build/src/bindings/sanitizer.rs +185 -0
  22. data/vendor/rb-sys-build/src/bindings/stable_api.rs +247 -0
  23. data/vendor/rb-sys-build/src/bindings/wrapper.h +71 -0
  24. data/vendor/rb-sys-build/src/bindings.rs +280 -0
  25. data/vendor/rb-sys-build/src/cc.rs +421 -0
  26. data/vendor/rb-sys-build/src/lib.rs +12 -0
  27. data/vendor/rb-sys-build/src/rb_config/flags.rs +101 -0
  28. data/vendor/rb-sys-build/src/rb_config/library.rs +132 -0
  29. data/vendor/rb-sys-build/src/rb_config/search_path.rs +57 -0
  30. data/vendor/rb-sys-build/src/rb_config.rs +906 -0
  31. data/vendor/rb-sys-build/src/utils.rs +53 -0
  32. metadata +25 -11
  33. data/ext/itsi_server/target/release/build/clang-sys-0dae18670e690c25/out/common.rs +0 -355
  34. data/ext/itsi_server/target/release/build/clang-sys-0dae18670e690c25/out/dynamic.rs +0 -276
  35. data/ext/itsi_server/target/release/build/clang-sys-0dae18670e690c25/out/macros.rs +0 -49
  36. data/ext/itsi_server/target/release/build/oid-registry-71b994a322b296ec/out/oid_db.rs +0 -537
  37. data/ext/itsi_server/target/release/build/rb-sys-9f9831ab50fb86db/out/bindings-0.9.124-mri-arm64-darwin24-2.7.8.rs +0 -6234
  38. data/ext/itsi_server/target/release/build/rb-sys-9f9831ab50fb86db/out/bindings-0.9.124-mri-arm64-darwin24-3.4.5.rs +0 -8936
  39. data/ext/itsi_server/target/release/build/rb-sys-9f9831ab50fb86db/out/bindings-0.9.124-mri-arm64-darwin24-4.0.1.rs +0 -9060
  40. data/ext/itsi_server/target/release/build/typenum-11265e44e46de3b7/out/tests.rs +0 -20563
@@ -0,0 +1,101 @@
1
+ /// Some helper functionality around shell flags
2
+ pub struct Flags<'a> {
3
+ inner: &'a str,
4
+ }
5
+
6
+ impl<'a> Flags<'a> {
7
+ /// Creates a new `Flags` instance
8
+ pub fn new(inner: &'a str) -> Self {
9
+ Self { inner }
10
+ }
11
+ }
12
+
13
+ /// Iterates over a string of flags
14
+ impl<'a> Iterator for Flags<'a> {
15
+ type Item = &'a str;
16
+
17
+ fn next(&mut self) -> Option<Self::Item> {
18
+ let mut last_was_space = false;
19
+
20
+ let last_idx = self
21
+ .inner
22
+ .chars()
23
+ .by_ref()
24
+ .take_while(|c| match c {
25
+ '-' => {
26
+ if last_was_space {
27
+ false
28
+ } else {
29
+ last_was_space = false;
30
+ true
31
+ }
32
+ }
33
+ ' ' => {
34
+ last_was_space = true;
35
+
36
+ true
37
+ }
38
+ _ => {
39
+ last_was_space = false;
40
+ true
41
+ }
42
+ })
43
+ .count();
44
+
45
+ let buf = &self.inner[..last_idx].trim();
46
+
47
+ if buf.is_empty() {
48
+ None
49
+ } else {
50
+ self.inner = self.inner[last_idx..].trim();
51
+ Some(buf)
52
+ }
53
+ }
54
+ }
55
+
56
+ #[cfg(test)]
57
+ mod tests {
58
+ use super::*;
59
+
60
+ #[test]
61
+ fn test_basic_flags() {
62
+ let mut flags = Flags::new("--foo --bar -baz");
63
+
64
+ assert_eq!(flags.next(), Some("--foo"));
65
+ assert_eq!(flags.next(), Some("--bar"));
66
+ assert_eq!(flags.next(), Some("-baz"));
67
+ assert_eq!(flags.next(), None);
68
+ }
69
+
70
+ #[test]
71
+ fn test_flag_variations() {
72
+ let mut flags = Flags::new("-ltest --library test");
73
+
74
+ assert_eq!(flags.next(), Some("-ltest"));
75
+ assert_eq!(flags.next(), Some("--library test"));
76
+ assert_eq!(flags.next(), None);
77
+ }
78
+
79
+ #[test]
80
+ fn test_real_ldflags() {
81
+ let mut flags = Flags::new("-L. -L/Users/ianks/.asdf/installs/ruby/3.1.1/lib -L/opt/homebrew/opt/openssl@1.1/lib -fstack-protector-strong");
82
+
83
+ assert_eq!(flags.next(), Some("-L."));
84
+ assert_eq!(
85
+ flags.next(),
86
+ Some("-L/Users/ianks/.asdf/installs/ruby/3.1.1/lib")
87
+ );
88
+ assert_eq!(flags.next(), Some("-L/opt/homebrew/opt/openssl@1.1/lib"));
89
+ assert_eq!(flags.next(), Some("-fstack-protector-strong"));
90
+ assert_eq!(flags.next(), None);
91
+ }
92
+
93
+ #[test]
94
+ fn test_dashed_flag_with_dashed_val() {
95
+ let mut flags = Flags::new("-ltest -fsomething-foo bar-val");
96
+
97
+ assert_eq!(flags.next(), Some("-ltest"));
98
+ assert_eq!(flags.next(), Some("-fsomething-foo bar-val"));
99
+ assert_eq!(flags.next(), None);
100
+ }
101
+ }
@@ -0,0 +1,132 @@
1
+ /// Represents the kind of library.
2
+ #[derive(Debug, PartialEq, Eq, Clone, Copy)]
3
+ pub enum LibraryKind {
4
+ Framework,
5
+ Dylib,
6
+ Static,
7
+ None,
8
+ }
9
+
10
+ /// Represents a search path that can be linked with Cargo.
11
+ #[derive(Debug, PartialEq, Eq)]
12
+ pub struct Library {
13
+ pub kind: LibraryKind,
14
+ pub name: String,
15
+ }
16
+
17
+ impl Library {
18
+ pub fn is_static(&self) -> bool {
19
+ self.kind == LibraryKind::Static
20
+ }
21
+ }
22
+
23
+ impl From<&str> for LibraryKind {
24
+ fn from(s: &str) -> Self {
25
+ match s {
26
+ "framework" => LibraryKind::Framework,
27
+ "dylib" => LibraryKind::Dylib,
28
+ "static" => LibraryKind::Static,
29
+ _ => LibraryKind::None,
30
+ }
31
+ }
32
+ }
33
+
34
+ impl From<&str> for Library {
35
+ fn from(s: &str) -> Self {
36
+ let parts: Vec<_> = s.splitn(2, '=').collect();
37
+
38
+ match parts.len() {
39
+ 1 => (LibraryKind::None, parts[0]).into(),
40
+ 2 => (parts[0], parts[1]).into(),
41
+ _ => panic!("Invalid library specification: {}", s),
42
+ }
43
+ }
44
+ }
45
+
46
+ impl From<String> for Library {
47
+ fn from(s: String) -> Self {
48
+ s.as_str().into()
49
+ }
50
+ }
51
+
52
+ fn sanitize_library_name(name: &str) -> &str {
53
+ name.trim_end_matches(".lib").trim_start_matches("-l")
54
+ }
55
+
56
+ impl<K, L> From<(K, L)> for Library
57
+ where
58
+ K: Into<LibraryKind>,
59
+ L: Into<String>,
60
+ {
61
+ fn from((kind, name): (K, L)) -> Self {
62
+ Self {
63
+ kind: kind.into(),
64
+ name: sanitize_library_name(&name.into()).into(),
65
+ }
66
+ }
67
+ }
68
+
69
+ impl std::fmt::Display for Library {
70
+ fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
71
+ match self.kind {
72
+ LibraryKind::Framework => write!(f, "framework={}", self.name),
73
+ LibraryKind::Dylib => write!(f, "dylib={}", self.name),
74
+ LibraryKind::Static => write!(f, "static={}", self.name),
75
+ LibraryKind::None => write!(f, "{}", self.name),
76
+ }
77
+ }
78
+ }
79
+
80
+ #[cfg(test)]
81
+ mod tests {
82
+ use super::*;
83
+
84
+ #[test]
85
+ fn test_trim_leading_link_flag() {
86
+ let result: Library = "-lfoo".to_string().into();
87
+
88
+ assert_eq!(result.name, "foo");
89
+ }
90
+
91
+ #[test]
92
+ fn test_trim_trailing_lib_extension() {
93
+ let result: Library = "foo.lib".to_string().into();
94
+
95
+ assert_eq!(result.name, "foo");
96
+ }
97
+
98
+ #[test]
99
+ fn test_trim_leading_link_flag_and_trailing_lib_extension() {
100
+ let result: Library = "-lfoo.lib".to_string().into();
101
+
102
+ assert_eq!(result.name, "foo");
103
+ }
104
+
105
+ #[test]
106
+ fn test_display_framework() {
107
+ let result: Library = "framework=foo".to_string().into();
108
+
109
+ assert_eq!(result.to_string(), "framework=foo");
110
+ }
111
+
112
+ #[test]
113
+ fn test_display_dylib() {
114
+ let result: Library = "dylib=foo".to_string().into();
115
+
116
+ assert_eq!(result.to_string(), "dylib=foo");
117
+ }
118
+
119
+ #[test]
120
+ fn test_display_static() {
121
+ let result: Library = "static=-lfoo".to_string().into();
122
+
123
+ assert_eq!(result.to_string(), "static=foo");
124
+ }
125
+
126
+ #[test]
127
+ fn test_display_none() {
128
+ let result: Library = "foo".to_string().into();
129
+
130
+ assert_eq!(result.to_string(), "foo");
131
+ }
132
+ }
@@ -0,0 +1,57 @@
1
+ /// Represents the kind of search path.
2
+ #[derive(Debug, PartialEq, Eq)]
3
+ pub enum SearchPathKind {
4
+ Native,
5
+ Framework,
6
+ }
7
+
8
+ /// Represents a library taht can be linked with Cargo.
9
+ #[derive(Debug, PartialEq, Eq)]
10
+ pub struct SearchPath {
11
+ pub kind: SearchPathKind,
12
+ pub name: String,
13
+ }
14
+
15
+ impl From<&str> for SearchPathKind {
16
+ fn from(s: &str) -> Self {
17
+ match s {
18
+ "framework" => SearchPathKind::Framework,
19
+ "native" => SearchPathKind::Native,
20
+ _ => panic!("Unknown lib kind: {}", s),
21
+ }
22
+ }
23
+ }
24
+
25
+ impl From<&str> for SearchPath {
26
+ fn from(s: &str) -> Self {
27
+ let parts: Vec<_> = s.split('=').collect();
28
+
29
+ match parts.len() {
30
+ 1 => (SearchPathKind::Native, parts[0]).into(),
31
+ 2 => (parts[0], parts[1]).into(),
32
+ _ => panic!("Invalid library specification: {}", s),
33
+ }
34
+ }
35
+ }
36
+
37
+ impl<K, T> From<(K, T)> for SearchPath
38
+ where
39
+ K: Into<SearchPathKind>,
40
+ T: Into<String>,
41
+ {
42
+ fn from((kind, name): (K, T)) -> Self {
43
+ Self {
44
+ kind: kind.into(),
45
+ name: name.into(),
46
+ }
47
+ }
48
+ }
49
+
50
+ impl std::fmt::Display for SearchPath {
51
+ fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
52
+ match self.kind {
53
+ SearchPathKind::Framework => write!(f, "framework={}", self.name),
54
+ SearchPathKind::Native => write!(f, "native={}", self.name),
55
+ }
56
+ }
57
+ }