Macro detour::static_detour [−][src]
macro_rules! static_detour { (@ parse_attributes($($input : tt) *) | #[$attribute : meta] $($rest : tt) *) => { ... }; (@ parse_attributes($($input : tt) *) | $($rest : tt) +) => { ... }; (@ parse_access_modifier($($input : tt) *) | pub(in $vis : path) static $($rest : tt) *) => { ... }; (@ parse_access_modifier($($input : tt) *) | pub($vis : tt) static $($rest : tt) *) => { ... }; (@ parse_access_modifier($($input : tt) *) | pub static $($rest : tt) *) => { ... }; (@ parse_access_modifier($($input : tt) *) | static $($rest : tt) *) => { ... }; (@ parse_name($($input : tt) *) | $name : ident : $($rest : tt) *) => { ... }; (@ parse_unsafe($($input : tt) *) | unsafe $($rest : tt) *) => { ... }; (@ parse_unsafe($($input : tt) *) | $($rest : tt) *) => { ... }; (@ parse_calling_convention($($input : tt) *) ($($modifier : tt) *) | extern $cc : tt fn $($rest : tt) *) => { ... }; (@ parse_calling_convention($($input : tt) *) ($($modifier : tt) *) | extern fn $($rest : tt) *) => { ... }; (@ parse_calling_convention($($input : tt) *) ($($modifier : tt) *) | fn $($rest : tt) *) => { ... }; (@ parse_prototype($($input : tt) *) | ($($argument_type : ty), *) -> $return_type : ty ; $($rest : tt) *) => { ... }; (@ parse_prototype($($input : tt) *) | ($($argument_type : ty), *) $($rest : tt) *) => { ... }; (@ parse_terminator($($input : tt) *) | ; $($rest : tt) *) => { ... }; (@ parse_entries($($input : tt) *) | $($rest : tt) +) => { ... }; (@ parse_entries($($input : tt) *) |) => { ... }; (@ aggregate($($attribute : meta) *) ($($visibility : tt) *) ($name : ident) ($($modifier : tt) *) ($($argument_type : ty) *) ($return_type : ty)) => { ... }; (@ create_detour($($argument_name : ident) *) ($($attribute : meta) *) ($($visibility : tt) *) ($name : ident) ($($modifier : tt) *) ($($argument_type : ty) *) ($return_type : ty) ($fn_type : ty)) => { ... }; (@ argument_names($label : ident) ($($input : tt) *) ($($token : tt) *)) => { ... }; (@ argument_names($label : ident) ($($input : tt) *) ($hd_name : tt $($tl_name : tt) *) ($hd : tt $($tl : tt) *) ($($acc : tt) *)) => { ... }; (@ argument_names($label : ident) ($($input : tt) *) ($($name : tt) *) () ($($acc : tt) *)) => { ... }; (@ generate $item : item) => { ... }; ($($t : tt) +) => { ... }; }
Expand description
A macro for defining static, type-safe detours.
This macro defines one or more StaticDetours.
Syntax
ⓘ
static_detour! { [pub] static NAME_1: [unsafe] [extern "cc"] fn([argument]...) [-> ret]; [pub] static NAME_2: [unsafe] [extern "cc"] fn([argument]...) [-> ret]; ... [pub] static NAME_N: [unsafe] [extern "cc"] fn([argument]...) [-> ret]; }
Example
static_detour! { // The simplest detour static Foo: fn(); // An unsafe public detour with a different calling convention pub static PubFoo: unsafe extern "C" fn(i32) -> i32; // A specific visibility modifier pub(crate) static PubSelf: unsafe extern "C" fn(); }