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.
- checksums.yaml +4 -4
- data/Cargo.lock +25 -38
- data/Cargo.toml +4 -0
- data/Rakefile +39 -7
- data/ext/itsi_scheduler/Cargo.toml +1 -1
- data/ext/itsi_server/Cargo.lock +2 -2
- data/ext/itsi_server/Cargo.toml +1 -1
- data/ext/itsi_server/src/server/middleware_stack/mod.rs +3 -9
- data/ext/itsi_server/src/server/signal.rs +7 -5
- data/ext/itsi_server/src/services/itsi_http_service.rs +5 -8
- data/lib/itsi/server/native_extension.rb +34 -0
- data/lib/itsi/server/version.rb +1 -1
- data/lib/itsi/server.rb +10 -2
- data/vendor/rb-sys-build/.cargo-ok +1 -0
- data/vendor/rb-sys-build/.cargo_vcs_info.json +6 -0
- data/vendor/rb-sys-build/Cargo.lock +294 -0
- data/vendor/rb-sys-build/Cargo.toml +71 -0
- data/vendor/rb-sys-build/Cargo.toml.orig +32 -0
- data/vendor/rb-sys-build/LICENSE-APACHE +190 -0
- data/vendor/rb-sys-build/LICENSE-MIT +21 -0
- data/vendor/rb-sys-build/src/bindings/sanitizer.rs +185 -0
- data/vendor/rb-sys-build/src/bindings/stable_api.rs +247 -0
- data/vendor/rb-sys-build/src/bindings/wrapper.h +71 -0
- data/vendor/rb-sys-build/src/bindings.rs +280 -0
- data/vendor/rb-sys-build/src/cc.rs +421 -0
- data/vendor/rb-sys-build/src/lib.rs +12 -0
- data/vendor/rb-sys-build/src/rb_config/flags.rs +101 -0
- data/vendor/rb-sys-build/src/rb_config/library.rs +132 -0
- data/vendor/rb-sys-build/src/rb_config/search_path.rs +57 -0
- data/vendor/rb-sys-build/src/rb_config.rs +906 -0
- data/vendor/rb-sys-build/src/utils.rs +53 -0
- metadata +25 -11
- data/ext/itsi_server/target/release/build/clang-sys-0dae18670e690c25/out/common.rs +0 -355
- data/ext/itsi_server/target/release/build/clang-sys-0dae18670e690c25/out/dynamic.rs +0 -276
- data/ext/itsi_server/target/release/build/clang-sys-0dae18670e690c25/out/macros.rs +0 -49
- data/ext/itsi_server/target/release/build/oid-registry-71b994a322b296ec/out/oid_db.rs +0 -537
- data/ext/itsi_server/target/release/build/rb-sys-9f9831ab50fb86db/out/bindings-0.9.124-mri-arm64-darwin24-2.7.8.rs +0 -6234
- data/ext/itsi_server/target/release/build/rb-sys-9f9831ab50fb86db/out/bindings-0.9.124-mri-arm64-darwin24-3.4.5.rs +0 -8936
- data/ext/itsi_server/target/release/build/rb-sys-9f9831ab50fb86db/out/bindings-0.9.124-mri-arm64-darwin24-4.0.1.rs +0 -9060
- 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
|
+
}
|