1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
//! Utility proc macros for `hrpc`.
#![deny(missing_docs)]

use proc_macro::{Delimiter, Group, Ident, Punct, Span, TokenStream, TokenTree};

/// An attribute macro that turns an `async fn` into a hRPC handler function.
///
/// You should import either `hrpc::server::prelude` or `hrpc::make_handler` to be able to
/// use this macro properly.
#[proc_macro_attribute]
pub fn handler(_args: TokenStream, input: TokenStream) -> TokenStream {
    TokenStream::from_iter([
        TokenTree::Ident(Ident::new("make_handler", Span::mixed_site())),
        TokenTree::Punct(Punct::new('!', proc_macro::Spacing::Joint)),
        TokenTree::Group(Group::new(Delimiter::Brace, input)),
    ])
}