Macro proc_macro::bridge::with_api
source · macro_rules! with_api { ($S:ident, $self:ident, $m:ident) => { ... }; }
proc_macro_internals #27812)Expand description
Higher-order macro describing the server RPC API, allowing automatic generation of type-safe Rust APIs, both client-side and server-side.
with_api!(MySelf, my_self, my_macro) expands to:
my_macro! {
// ...
Literal {
// ...
fn character(ch: char) -> MySelf::Literal;
// ...
fn span(my_self: &MySelf::Literal) -> MySelf::Span;
fn set_span(my_self: &mut MySelf::Literal, span: MySelf::Span);
},
// ...
}RunThe first two arguments serve to customize the arguments names and argument/return types, to enable several different usecases:
If my_self is just self, then each fn signature can be used
as-is for a method. If it’s anything else (self_ in practice),
then the signatures don’t have a special self argument, and
can, therefore, have a different one introduced.
If MySelf is just Self, then the types are only valid inside
a trait or a trait impl, where the trait has associated types
for each of the API types. If non-associated types are desired,
a module name (self in practice) can be used instead of Self.