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();
}