Skip to main content

endpoint

Macro endpoint 

Source
macro_rules! endpoint {
    (@method GET) => { ... };
    (@method POST) => { ... };
    (@method PUT) => { ... };
    (@method PATCH) => { ... };
    (@method DELETE) => { ... };
    (@body $body:expr) => { ... };
    (@body) => { ... };
    (@decode $resp:ident, $ret:ty, json) => { ... };
    (@decode $resp:ident, $ret:ty, bytes) => { ... };
    (@decode $resp:ident, $ret:ty, void) => { ... };
    (@decode $resp:ident, $ret:ty, [map $r:ident : $wrap:ty => $proj:expr]) => { ... };
    (@types_entry Request<$lt:lifetime> { $($field:ident $( ( $rename:literal ) )? : $ftype:ty),* $(,)? } $($rest:tt)*) => { ... };
    (@types_entry Request { $($field:ident $( ( $rename:literal ) )? : $ftype:ty),* $(,)? } $($rest:tt)*) => { ... };
    (@types_entry Response<$lt:lifetime> { $($field:ident $( ( $rename:literal ) )? : $ftype:ty),* $(,)? } $($rest:tt)*) => { ... };
    (@types_entry Response { $($field:ident $( ( $rename:literal ) )? : $ftype:ty),* $(,)? } $($rest:tt)*) => { ... };
    (@types_entry $name:ident<$lt:lifetime> { $($field:ident $( ( $rename:literal ) )? : $ftype:ty),* $(,)? } $($rest:tt)*) => { ... };
    (@types_entry $name:ident { $($field:ident $( ( $rename:literal ) )? : $ftype:ty),* $(,)? } $($rest:tt)*) => { ... };
    (@types_entry Request $($rest:tt)*) => { ... };
    (@types_entry Response $($rest:tt)*) => { ... };
    (@types_entry $name:ident $($rest:tt)*) => { ... };
    (@types_entry) => { ... };
    (@fn
        attrs     = [$(#[$attr:meta])*],
        client    = $client:ident,
        name      = $name:ident,
        params    = [$($param:ident : $param_ty:ty),*],
        ret       = $ret:ty,
        method    = $method:ident,
        url       = $url:expr,
        paging    = [$($p_var:ident, $p_limit:literal)?],
        types     = [$($types:tt)*],
        pre       = [$($pre:tt)*],
        query     = [$($qk:literal => $qv:expr),*],
        body      = [$($body_expr:expr)?],
        decode    = $decode:tt,
    ) => { ... };
    (@body_inner
        attrs     = [$(#[$attr:meta])*],
        client    = $client:ident,
        name      = $name:ident,
        params    = [$($param:ident : $param_ty:ty),*],
        ret       = $ret:ty,
        body      = [
            $method:ident $url:expr;
            $(paging_query { $p_var:ident, limit = $p_limit:literal })?
            $(types    { $($types:tt)* })?
            $(prelude  { $($pre:tt)* })?
            $(query    { $($qk:literal => $qv:expr),* $(,)? })?
            $(body_serialize { $body_expr:expr })?
            map |$r:ident : $wrap:ty| $proj:expr
        ],
    ) => { ... };
    (@body_inner
        attrs     = [$(#[$attr:meta])*],
        client    = $client:ident,
        name      = $name:ident,
        params    = [$($param:ident : $param_ty:ty),*],
        ret       = $ret:ty,
        body      = [
            $method:ident $url:expr;
            $(paging_query { $p_var:ident, limit = $p_limit:literal })?
            $(types    { $($types:tt)* })?
            $(prelude  { $($pre:tt)* })?
            $(query    { $($qk:literal => $qv:expr),* $(,)? })?
            $(body_serialize { $body_expr:expr })?
            raw_bytes
        ],
    ) => { ... };
    (@body_inner
        attrs     = [$(#[$attr:meta])*],
        client    = $client:ident,
        name      = $name:ident,
        params    = [$($param:ident : $param_ty:ty),*],
        ret       = $ret:ty,
        body      = [
            $method:ident $url:expr;
            $(paging_query { $p_var:ident, limit = $p_limit:literal })?
            $(types    { $($types:tt)* })?
            $(prelude  { $($pre:tt)* })?
            $(query    { $($qk:literal => $qv:expr),* $(,)? })?
            $(body_serialize { $body_expr:expr })?
            void
        ],
    ) => { ... };
    (@body_inner
        attrs     = [$(#[$attr:meta])*],
        client    = $client:ident,
        name      = $name:ident,
        params    = [$($param:ident : $param_ty:ty),*],
        ret       = $ret:ty,
        body      = [
            $method:ident $url:expr;
            $(paging_query { $p_var:ident, limit = $p_limit:literal })?
            $(types    { $($types:tt)* })?
            $(prelude  { $($pre:tt)* })?
            $(query    { $($qk:literal => $qv:expr),* $(,)? })?
            $(body_serialize { $body_expr:expr })?
        ],
    ) => { ... };
    (
        types { $($types:tt)* }
        $($rest:tt)*
    ) => { ... };
    (
        $(#[$attr:meta])*
        $name:ident($cli:ident $(, $param:ident : $param_ty:ty)*) -> $ret:ty {
            $($body:tt)*
        }
        $($rest:tt)*
    ) => { ... };
    (
        $(#[$attr:meta])*
        $name:ident($($param:ident : $param_ty:ty),*) -> $ret:ty {
            $($body:tt)*
        }
        $($rest:tt)*
    ) => { ... };
    () => { ... };
}