openssl_sys/
macros.rs
1#![allow(unused_macros)]
2
3macro_rules! cfg_if {
5 ($(
7 if #[cfg($($meta:meta),*)] { $($it:item)* }
8 ) else * else {
9 $($it2:item)*
10 }) => {
11 cfg_if! {
12 @__items
13 () ;
14 $( ( ($($meta),*) ($($it)*) ), )*
15 ( () ($($it2)*) ),
16 }
17 };
18
19 (
21 if #[cfg($($i_met:meta),*)] { $($i_it:item)* }
22 $(
23 else if #[cfg($($e_met:meta),*)] { $($e_it:item)* }
24 )*
25 ) => {
26 cfg_if! {
27 @__items
28 () ;
29 ( ($($i_met),*) ($($i_it)*) ),
30 $( ( ($($e_met),*) ($($e_it)*) ), )*
31 ( () () ),
32 }
33 };
34
35 (@__items ($($not:meta,)*) ; ) => {};
40 (@__items ($($not:meta,)*) ; ( ($($m:meta),*) ($($it:item)*) ), $($rest:tt)*) => {
41 cfg_if! { @__apply cfg(all($($m,)* not(any($($not),*)))), $($it)* }
45
46 cfg_if! { @__items ($($not,)* $($m,)*) ; $($rest)* }
50 };
51
52 (@__apply $m:meta, $($it:item)*) => {
54 $(#[$m] $it)*
55 };
56}
57
58macro_rules! stack {
59 ($t:ident) => {
60 cfg_if! {
61 if #[cfg(any(ossl110, libressl390))] {
62 pub enum $t {}
63 } else {
64 #[repr(C)]
65 pub struct $t {
66 pub stack: $crate::_STACK,
67 }
68 }
69 }
70 };
71}
72
73macro_rules! const_ptr_api {
98 ( (partialarg)
102 { $(#[$fn_attr:meta])* pub fn $fn_name:ident }
103 $args_packed:tt
104 [ $($part_arg:tt)* ]
105 [ #[const_ptr_if( $($cfg:tt)* )] $($arg_rem:tt)* ]
106 $ret_packed:tt
107 ) => {
108 const_ptr_api!( (partialarg) { #[cfg($($cfg)*)] $(#[$fn_attr])* pub fn $fn_name } $args_packed [ $($part_arg)* *const ] [ $($arg_rem)* ] $ret_packed );
109 const_ptr_api!( (partialarg) { #[cfg(not($($cfg)*))] $(#[$fn_attr])* pub fn $fn_name } $args_packed [ $($part_arg)* *mut ] [ $($arg_rem)* ] $ret_packed );
110 };
111 ( (partialarg)
113 $def_packed:tt
114 $args_packed:tt
115 [ $($part_arg:tt)* ]
116 [ *mut $($arg_rem:tt)* ]
117 $ret_packed:tt
118 ) => {
119 const_ptr_api!( (partialarg) $def_packed $args_packed [ $($part_arg)* *mut ] [ $($arg_rem)* ] $ret_packed );
120 };
121 ( (partialarg)
123 $def_packed:tt
124 $args_packed:tt
125 [ $($part_arg:tt)* ]
126 [ *const $($arg_rem:tt)* ]
127 $ret_packed:tt
128 ) => {
129 const_ptr_api!( (partialarg) $def_packed $args_packed [ $($part_arg)* *const ] [ $($arg_rem)* ] $ret_packed );
130 };
131 ( (partialarg)
133 $def_packed:tt
134 { $($args_tt:tt)* }
135 [ $($part_arg:tt)* ]
136 [ $arg_ty:ty, $($arg_rem:tt)* ]
137 $ret_packed:tt
138 ) => {
139 const_ptr_api!( (parseargs) $def_packed { $($args_tt)* { $($part_arg)* $arg_ty } } [ $($arg_rem)* ] $ret_packed );
140 };
141 ( (partialarg)
143 $def_packed:tt
144 { $($args_tt:tt)* }
145 [ $($part_arg:tt)* ]
146 [ $arg_ty:ty ]
147 $ret_packed:tt
148 ) => {
149 const_ptr_api!( (parseargs) $def_packed { $($args_tt)* { $($part_arg)* $arg_ty } } [ ] $ret_packed );
150 };
151
152 ( (parseargs)
156 $def_packed:tt
157 $args_packed:tt
158 [ $arg_name:ident : $($arg_rem:tt)* ]
159 $ret_packed:tt
160 ) => {
161 const_ptr_api!( (partialarg) $def_packed $args_packed [ $arg_name: ] [ $($arg_rem)* ] $ret_packed );
162 };
163 ( (parseargs)
165 $def_packed:tt
166 $args_packed:tt
167 [ ]
168 [ -> $($rem:tt)* ]
169 ) => {
170 const_ptr_api!( (partialret) $def_packed $args_packed [] [ $($rem)* ] );
171 };
172 ( (parseargs)
174 $def_packed:tt
175 $args_packed:tt
176 [ ]
177 [ ]
178 ) => {
179 const_ptr_api!( (generate) $def_packed $args_packed { () } );
180 };
181
182 ( (partialret)
186 { $(#[$fn_attr:meta])* pub fn $fn_name:ident }
187 $args_packed:tt
188 [ $($part_ret:tt)* ]
189 [ #[const_ptr_if( $($cfg:tt)* )] $($rem:tt)* ]
190 ) => {
191 const_ptr_api!( (partialret) { #[cfg($($cfg)*)] $(#[$fn_attr])* pub fn $fn_name } $args_packed [ $($part_ret)* *const ] [ $($rem)* ] );
192 const_ptr_api!( (partialret) { #[cfg(not($($cfg)*))] $(#[$fn_attr])* pub fn $fn_name } $args_packed [ $($part_ret)* *mut ] [ $($rem)* ] );
193 };
194 ( (partialret)
196 $def_packed:tt
197 $args_packed:tt
198 [ $($part_ret:tt)* ]
199 [ *mut $($rem:tt)* ]
200 ) => {
201 const_ptr_api!( (partialret) $def_packed $args_packed [ $($part_ret)* *mut ] [ $($rem)* ] );
202 };
203 ( (partialret)
205 $def_packed:tt
206 $args_packed:tt
207 [ $($part_ret:tt)* ]
208 [ *const $($rem:tt)* ]
209 ) => {
210 const_ptr_api!( (partialret) $def_packed $args_packed [ $($part_ret)* *const ] [ $($rem)* ] );
211 };
212 ( (partialret)
214 $def_packed:tt
215 $args_packed:tt
216 [ $($part_ret:tt)* ]
217 [ $ret_ty:ty ]
218 ) => {
219 const_ptr_api!( (generate) $def_packed $args_packed { $($part_ret)* $ret_ty } );
220 };
221
222 ( (generate)
225 { $(#[$fn_attr:meta])* pub fn $fn_name:ident }
226 { $({ $arg_name:ident: $($arg_ty:tt)* })* }
227 { $ret_ty:ty }
228 ) => {
229 extern "C" {
230 $(#[$fn_attr])*
231 pub fn $fn_name( $(
232 $arg_name: $($arg_ty)*
233 ),* ) -> $ret_ty;
234 }
235 };
236
237 ( (fn)
241 $def_packed:tt
242 $arg_tts_packed:tt
243 $ret_packed:tt
244 [ ; $($rem:tt)* ]
245 ) => {
246 const_ptr_api!( (parseargs) $def_packed {} $arg_tts_packed $ret_packed );
247 const_ptr_api!( (extern) [ $($rem)* ] );
248 };
249 ( (fn)
253 $def_packed:tt
254 $arg_tts_packed:tt
255 [ $($ret_tt:tt)* ]
256 [ $tt:tt $($rem:tt)* ]
257 ) => {
258 const_ptr_api!( (fn) $def_packed $arg_tts_packed [ $($ret_tt)* $tt ] [ $($rem)* ] );
259 };
260
261 ( (extern) [
265 $(#[$fn_attr:meta])*
266 pub fn $fn_name:ident( $($arg_rem:tt)* ) $($rem:tt)*
267 ] ) => {
268 const_ptr_api!( (fn)
269 { $(#[$fn_attr])* pub fn $fn_name } [ $($arg_rem)* ] [] [ $($rem)* ]
270 );
271 };
272 ( (extern) [] ) => {};
274
275 ( extern "C" { $($rem:tt)* } ) => {
278 const_ptr_api!( (extern) [ $($rem)* ] );
279 };
280}