Macro detour::static_detour
source · [−]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();
}