Macro delayload

Source
macro_rules! delayload {
    {$dll:literal {$($($idents:ident)+ ($($params:ident : $types:ty),* $(,)?) -> $result:ty;)*}} => { ... };
    (@func pub fn $name:ident($($params:ident : $types:ty),* $(,)?) -> $result:ty) => { ... };
    (@func fn $name:ident($($params:ident : $types:ty),* $(,)?) -> $result:ty) => { ... };
    (@body $name:ident($($params:ident : $types:ty),* $(,)?) -> $result:ty) => { ... };
    (@result_from_win32((i32), $val:expr)) => { ... };
    (@result_from_win32((u32), $val:expr)) => { ... };
    (@result_from_win32((DWORD), $val:expr)) => { ... };
    (@result_from_win32((HRESULT), $val:expr)) => { ... };
    (@result_from_win32(($t:tt), $val:expr)) => { ... };
}