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)*
) => { ... };
() => { ... };
}