Skip to content

Commit dd3e3d9

Browse files
xeioexbavshin-f5
authored andcommitted
refactor!: reduce boilerplate code for ngx_module_t declarations
1 parent aefeb69 commit dd3e3d9

File tree

6 files changed

+67
-155
lines changed

6 files changed

+67
-155
lines changed

examples/async.rs

+7-31
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@ use std::time::Instant;
66

77
use ngx::core;
88
use ngx::ffi::{
9-
nginx_version, ngx_array_push, ngx_command_t, ngx_conf_t, ngx_cycle, ngx_event_t, ngx_http_core_module,
10-
ngx_http_core_run_phases, ngx_http_handler_pt, ngx_http_module_t, ngx_http_phases_NGX_HTTP_ACCESS_PHASE,
11-
ngx_http_request_t, ngx_int_t, ngx_module_t, ngx_posted_events, ngx_queue_s, ngx_str_t, ngx_uint_t, NGX_CONF_TAKE1,
12-
NGX_HTTP_LOC_CONF, NGX_HTTP_MODULE, NGX_RS_HTTP_LOC_CONF_OFFSET, NGX_RS_MODULE_SIGNATURE,
9+
ngx_array_push, ngx_command_t, ngx_conf_t, ngx_cycle, ngx_event_t, ngx_http_core_module, ngx_http_core_run_phases,
10+
ngx_http_handler_pt, ngx_http_module_t, ngx_http_phases_NGX_HTTP_ACCESS_PHASE, ngx_http_request_t, ngx_int_t,
11+
ngx_module_t, ngx_posted_events, ngx_queue_s, ngx_str_t, ngx_uint_t, NGX_CONF_TAKE1, NGX_HTTP_LOC_CONF,
12+
NGX_HTTP_MODULE, NGX_RS_HTTP_LOC_CONF_OFFSET,
1313
};
1414
use ngx::http::{self, HTTPModule, MergeConfigError};
1515
use ngx::{http_request_handler, ngx_log_debug_http, ngx_null_command, ngx_string};
@@ -86,34 +86,10 @@ ngx::ngx_modules!(ngx_http_async_module);
8686
#[allow(non_upper_case_globals)]
8787
#[cfg_attr(not(feature = "export-modules"), no_mangle)]
8888
pub static mut ngx_http_async_module: ngx_module_t = ngx_module_t {
89-
ctx_index: ngx_uint_t::MAX,
90-
index: ngx_uint_t::MAX,
91-
name: std::ptr::null_mut(),
92-
spare0: 0,
93-
spare1: 0,
94-
version: nginx_version as ngx_uint_t,
95-
signature: NGX_RS_MODULE_SIGNATURE.as_ptr() as *const c_char,
96-
97-
ctx: &NGX_HTTP_ASYNC_MODULE_CTX as *const _ as *mut _,
89+
ctx: std::ptr::addr_of!(NGX_HTTP_ASYNC_MODULE_CTX) as _,
9890
commands: unsafe { &NGX_HTTP_ASYNC_COMMANDS[0] as *const _ as *mut _ },
99-
type_: NGX_HTTP_MODULE as ngx_uint_t,
100-
101-
init_master: None,
102-
init_module: None,
103-
init_process: None,
104-
init_thread: None,
105-
exit_thread: None,
106-
exit_process: None,
107-
exit_master: None,
108-
109-
spare_hook0: 0,
110-
spare_hook1: 0,
111-
spare_hook2: 0,
112-
spare_hook3: 0,
113-
spare_hook4: 0,
114-
spare_hook5: 0,
115-
spare_hook6: 0,
116-
spare_hook7: 0,
91+
type_: NGX_HTTP_MODULE as _,
92+
..ngx_module_t::default()
11793
};
11894

11995
impl http::Merge for ModuleConfig {

examples/awssig.rs

+6-31
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,9 @@ use std::ptr::addr_of;
44
use http::HeaderMap;
55
use ngx::core;
66
use ngx::ffi::{
7-
nginx_version, ngx_array_push, ngx_command_t, ngx_conf_t, ngx_http_core_module, ngx_http_handler_pt,
8-
ngx_http_module_t, ngx_http_phases_NGX_HTTP_PRECONTENT_PHASE, ngx_int_t, ngx_module_t, ngx_str_t, ngx_uint_t,
9-
NGX_CONF_TAKE1, NGX_HTTP_LOC_CONF, NGX_HTTP_MODULE, NGX_HTTP_SRV_CONF, NGX_RS_HTTP_LOC_CONF_OFFSET,
10-
NGX_RS_MODULE_SIGNATURE,
7+
ngx_array_push, ngx_command_t, ngx_conf_t, ngx_http_core_module, ngx_http_handler_pt, ngx_http_module_t,
8+
ngx_http_phases_NGX_HTTP_PRECONTENT_PHASE, ngx_int_t, ngx_module_t, ngx_str_t, ngx_uint_t, NGX_CONF_TAKE1,
9+
NGX_HTTP_LOC_CONF, NGX_HTTP_MODULE, NGX_HTTP_SRV_CONF, NGX_RS_HTTP_LOC_CONF_OFFSET,
1110
};
1211
use ngx::http::*;
1312
use ngx::{http_request_handler, ngx_log_debug_http, ngx_null_command, ngx_string};
@@ -106,34 +105,10 @@ ngx::ngx_modules!(ngx_http_awssigv4_module);
106105
#[allow(non_upper_case_globals)]
107106
#[cfg_attr(not(feature = "export-modules"), no_mangle)]
108107
pub static mut ngx_http_awssigv4_module: ngx_module_t = ngx_module_t {
109-
ctx_index: ngx_uint_t::MAX,
110-
index: ngx_uint_t::MAX,
111-
name: std::ptr::null_mut(),
112-
spare0: 0,
113-
spare1: 0,
114-
version: nginx_version as ngx_uint_t,
115-
signature: NGX_RS_MODULE_SIGNATURE.as_ptr() as *const c_char,
116-
117-
ctx: &NGX_HTTP_AWSSIGV4_MODULE_CTX as *const _ as *mut _,
108+
ctx: std::ptr::addr_of!(NGX_HTTP_AWSSIGV4_MODULE_CTX) as _,
118109
commands: unsafe { &NGX_HTTP_AWSSIGV4_COMMANDS[0] as *const _ as *mut _ },
119-
type_: NGX_HTTP_MODULE as ngx_uint_t,
120-
121-
init_master: None,
122-
init_module: None,
123-
init_process: None,
124-
init_thread: None,
125-
exit_thread: None,
126-
exit_process: None,
127-
exit_master: None,
128-
129-
spare_hook0: 0,
130-
spare_hook1: 0,
131-
spare_hook2: 0,
132-
spare_hook3: 0,
133-
spare_hook4: 0,
134-
spare_hook5: 0,
135-
spare_hook6: 0,
136-
spare_hook7: 0,
110+
type_: NGX_HTTP_MODULE as _,
111+
..ngx_module_t::default()
137112
};
138113

139114
impl Merge for ModuleConfig {

examples/curl.rs

+6-30
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@ use std::ptr::addr_of;
33

44
use ngx::core;
55
use ngx::ffi::{
6-
nginx_version, ngx_array_push, ngx_command_t, ngx_conf_t, ngx_http_core_module, ngx_http_handler_pt,
7-
ngx_http_module_t, ngx_http_phases_NGX_HTTP_ACCESS_PHASE, ngx_int_t, ngx_module_t, ngx_str_t, ngx_uint_t,
8-
NGX_CONF_TAKE1, NGX_HTTP_LOC_CONF, NGX_HTTP_MODULE, NGX_RS_HTTP_LOC_CONF_OFFSET, NGX_RS_MODULE_SIGNATURE,
6+
ngx_array_push, ngx_command_t, ngx_conf_t, ngx_http_core_module, ngx_http_handler_pt, ngx_http_module_t,
7+
ngx_http_phases_NGX_HTTP_ACCESS_PHASE, ngx_int_t, ngx_module_t, ngx_str_t, ngx_uint_t, NGX_CONF_TAKE1,
8+
NGX_HTTP_LOC_CONF, NGX_HTTP_MODULE, NGX_RS_HTTP_LOC_CONF_OFFSET,
99
};
1010
use ngx::http::{self, HTTPModule, MergeConfigError};
1111
use ngx::{http_request_handler, ngx_log_debug_http, ngx_null_command, ngx_string};
@@ -68,34 +68,10 @@ ngx::ngx_modules!(ngx_http_curl_module);
6868
#[allow(non_upper_case_globals)]
6969
#[cfg_attr(not(feature = "export-modules"), no_mangle)]
7070
pub static mut ngx_http_curl_module: ngx_module_t = ngx_module_t {
71-
ctx_index: ngx_uint_t::MAX,
72-
index: ngx_uint_t::MAX,
73-
name: std::ptr::null_mut(),
74-
spare0: 0,
75-
spare1: 0,
76-
version: nginx_version as ngx_uint_t,
77-
signature: NGX_RS_MODULE_SIGNATURE.as_ptr() as *const c_char,
78-
79-
ctx: &NGX_HTTP_CURL_MODULE_CTX as *const _ as *mut _,
71+
ctx: std::ptr::addr_of!(NGX_HTTP_CURL_MODULE_CTX) as _,
8072
commands: unsafe { &NGX_HTTP_CURL_COMMANDS[0] as *const _ as *mut _ },
81-
type_: NGX_HTTP_MODULE as ngx_uint_t,
82-
83-
init_master: None,
84-
init_module: None,
85-
init_process: None,
86-
init_thread: None,
87-
exit_thread: None,
88-
exit_process: None,
89-
exit_master: None,
90-
91-
spare_hook0: 0,
92-
spare_hook1: 0,
93-
spare_hook2: 0,
94-
spare_hook3: 0,
95-
spare_hook4: 0,
96-
spare_hook5: 0,
97-
spare_hook6: 0,
98-
spare_hook7: 0,
73+
type_: NGX_HTTP_MODULE as _,
74+
..ngx_module_t::default()
9975
};
10076

10177
impl http::Merge for ModuleConfig {

examples/httporigdst.rs

+7-30
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
use std::ffi::{c_char, c_int, c_void};
1+
use std::ffi::{c_int, c_void};
22
use std::ptr::addr_of;
33

44
use ngx::core;
55
use ngx::ffi::{
6-
in_port_t, nginx_version, ngx_conf_t, ngx_connection_local_sockaddr, ngx_http_add_variable, ngx_http_module_t,
7-
ngx_http_variable_t, ngx_inet_get_port, ngx_int_t, ngx_module_t, ngx_sock_ntop, ngx_str_t, ngx_uint_t,
8-
ngx_variable_value_t, sockaddr, sockaddr_storage, INET_ADDRSTRLEN, NGX_HTTP_MODULE, NGX_RS_MODULE_SIGNATURE,
6+
in_port_t, ngx_conf_t, ngx_connection_local_sockaddr, ngx_http_add_variable, ngx_http_module_t,
7+
ngx_http_variable_t, ngx_inet_get_port, ngx_int_t, ngx_module_t, ngx_sock_ntop, ngx_str_t, ngx_variable_value_t,
8+
sockaddr, sockaddr_storage, INET_ADDRSTRLEN, NGX_HTTP_MODULE,
99
};
1010
use ngx::http::{self, HTTPModule};
1111
use ngx::{http_variable_get, ngx_http_null_variable, ngx_log_debug_http, ngx_null_string, ngx_string};
@@ -96,33 +96,10 @@ ngx::ngx_modules!(ngx_http_orig_dst_module);
9696
#[allow(non_upper_case_globals)]
9797
#[cfg_attr(not(feature = "export-modules"), no_mangle)]
9898
pub static mut ngx_http_orig_dst_module: ngx_module_t = ngx_module_t {
99-
ctx_index: ngx_uint_t::MAX,
100-
index: ngx_uint_t::MAX,
101-
name: std::ptr::null_mut(),
102-
spare0: 0,
103-
spare1: 0,
104-
version: nginx_version as ngx_uint_t,
105-
signature: NGX_RS_MODULE_SIGNATURE.as_ptr() as *const c_char,
106-
ctx: &NGX_HTTP_ORIG_DST_MODULE_CTX as *const _ as *mut _,
99+
ctx: std::ptr::addr_of!(NGX_HTTP_ORIG_DST_MODULE_CTX) as _,
107100
commands: std::ptr::null_mut(),
108-
type_: NGX_HTTP_MODULE as ngx_uint_t,
109-
110-
init_master: None,
111-
init_module: None,
112-
init_process: None,
113-
init_thread: None,
114-
exit_thread: None,
115-
exit_process: None,
116-
exit_master: None,
117-
118-
spare_hook0: 0,
119-
spare_hook1: 0,
120-
spare_hook2: 0,
121-
spare_hook3: 0,
122-
spare_hook4: 0,
123-
spare_hook5: 0,
124-
spare_hook6: 0,
125-
spare_hook7: 0,
101+
type_: NGX_HTTP_MODULE as _,
102+
..ngx_module_t::default()
126103
};
127104

128105
static mut NGX_HTTP_ORIG_DST_VARS: [ngx_http_variable_t; 3] = [

examples/upstream.rs

+8-33
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,11 @@ use std::slice;
1313

1414
use ngx::core::{Pool, Status};
1515
use ngx::ffi::{
16-
nginx_version, ngx_atoi, ngx_command_t, ngx_conf_t, ngx_connection_t, ngx_event_free_peer_pt,
17-
ngx_event_get_peer_pt, ngx_http_module_t, ngx_http_upstream_init_peer_pt, ngx_http_upstream_init_pt,
18-
ngx_http_upstream_init_round_robin, ngx_http_upstream_module, ngx_http_upstream_srv_conf_t, ngx_http_upstream_t,
19-
ngx_int_t, ngx_module_t, ngx_peer_connection_t, ngx_str_t, ngx_uint_t, NGX_CONF_NOARGS, NGX_CONF_TAKE1,
20-
NGX_CONF_UNSET, NGX_ERROR, NGX_HTTP_MODULE, NGX_HTTP_UPS_CONF, NGX_LOG_EMERG, NGX_RS_HTTP_SRV_CONF_OFFSET,
21-
NGX_RS_MODULE_SIGNATURE,
16+
ngx_atoi, ngx_command_t, ngx_conf_t, ngx_connection_t, ngx_event_free_peer_pt, ngx_event_get_peer_pt,
17+
ngx_http_module_t, ngx_http_upstream_init_peer_pt, ngx_http_upstream_init_pt, ngx_http_upstream_init_round_robin,
18+
ngx_http_upstream_module, ngx_http_upstream_srv_conf_t, ngx_http_upstream_t, ngx_int_t, ngx_module_t,
19+
ngx_peer_connection_t, ngx_str_t, ngx_uint_t, NGX_CONF_NOARGS, NGX_CONF_TAKE1, NGX_CONF_UNSET, NGX_ERROR,
20+
NGX_HTTP_MODULE, NGX_HTTP_UPS_CONF, NGX_LOG_EMERG, NGX_RS_HTTP_SRV_CONF_OFFSET,
2221
};
2322
use ngx::http::{
2423
ngx_http_conf_get_module_srv_conf, ngx_http_conf_upstream_srv_conf_immutable,
@@ -110,34 +109,10 @@ ngx::ngx_modules!(ngx_http_upstream_custom_module);
110109
#[allow(non_upper_case_globals)]
111110
#[cfg_attr(not(feature = "export-modules"), no_mangle)]
112111
pub static mut ngx_http_upstream_custom_module: ngx_module_t = ngx_module_t {
113-
ctx_index: ngx_uint_t::MAX,
114-
index: ngx_uint_t::MAX,
115-
name: std::ptr::null_mut(),
116-
spare0: 0,
117-
spare1: 0,
118-
version: nginx_version as ngx_uint_t,
119-
signature: NGX_RS_MODULE_SIGNATURE.as_ptr() as *const c_char,
120-
121-
ctx: &NGX_HTTP_UPSTREAM_CUSTOM_CTX as *const _ as *mut _,
112+
ctx: std::ptr::addr_of!(NGX_HTTP_UPSTREAM_CUSTOM_CTX) as _,
122113
commands: unsafe { &NGX_HTTP_UPSTREAM_CUSTOM_COMMANDS[0] as *const _ as *mut _ },
123-
type_: NGX_HTTP_MODULE as ngx_uint_t,
124-
125-
init_master: None,
126-
init_module: None,
127-
init_process: None,
128-
init_thread: None,
129-
exit_thread: None,
130-
exit_process: None,
131-
exit_master: None,
132-
133-
spare_hook0: 0,
134-
spare_hook1: 0,
135-
spare_hook2: 0,
136-
spare_hook3: 0,
137-
spare_hook4: 0,
138-
spare_hook5: 0,
139-
spare_hook6: 0,
140-
spare_hook7: 0,
114+
type_: NGX_HTTP_MODULE as _,
115+
..ngx_module_t::default()
141116
};
142117

143118
// http_upstream_init_custom_peer

nginx-sys/src/lib.rs

+33
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,39 @@ impl TryFrom<ngx_str_t> for &str {
174174
}
175175
}
176176

177+
impl ngx_module_t {
178+
/// Create a new `ngx_module_t` instance with default values.
179+
pub const fn default() -> Self {
180+
Self {
181+
ctx_index: ngx_uint_t::MAX,
182+
index: ngx_uint_t::MAX,
183+
name: core::ptr::null_mut(),
184+
spare0: 0,
185+
spare1: 0,
186+
version: nginx_version as ngx_uint_t,
187+
signature: NGX_RS_MODULE_SIGNATURE.as_ptr(),
188+
ctx: core::ptr::null_mut(),
189+
commands: core::ptr::null_mut(),
190+
type_: 0,
191+
init_master: None,
192+
init_module: None,
193+
init_process: None,
194+
init_thread: None,
195+
exit_thread: None,
196+
exit_process: None,
197+
exit_master: None,
198+
spare_hook0: 0,
199+
spare_hook1: 0,
200+
spare_hook2: 0,
201+
spare_hook3: 0,
202+
spare_hook4: 0,
203+
spare_hook5: 0,
204+
spare_hook6: 0,
205+
spare_hook7: 0,
206+
}
207+
}
208+
}
209+
177210
/// Add a key-value pair to an nginx table entry (`ngx_table_elt_t`) in the given nginx memory pool.
178211
///
179212
/// # Arguments

0 commit comments

Comments
 (0)