1#![deny(rust_2018_idioms, nonstandard_style, future_incompatible)]
2#![doc(html_logo_url = "https://actix.rs/img/logo.png")]
3#![doc(html_favicon_url = "https://actix.rs/favicon.ico")]
4#![cfg_attr(docsrs, feature(doc_auto_cfg))]
5#![recursion_limit = "128"]
6
7use proc_macro::TokenStream;
8use quote::quote;
9use syn::DeriveInput;
10
11mod message;
12mod message_response;
13
14#[proc_macro_derive(Message, attributes(rtype))]
15pub fn message_derive_rtype(input: TokenStream) -> TokenStream {
16 let ast: DeriveInput = syn::parse(input).unwrap();
17
18 message::expand(&ast).into()
19}
20
21#[proc_macro_derive(MessageResponse)]
22pub fn message_response_derive_rtype(input: TokenStream) -> TokenStream {
23 let ast: DeriveInput = syn::parse(input).unwrap();
24
25 message_response::expand(&ast).into()
26}
27
28#[proc_macro_attribute]
39pub fn main(_: TokenStream, item: TokenStream) -> TokenStream {
40 let mut output: TokenStream = (quote! {
41 #[::actix::__private::main(system = "::actix::System")]
42 })
43 .into();
44
45 output.extend(item);
46 output
47}
48
49#[proc_macro_attribute]
60pub fn test(_: TokenStream, item: TokenStream) -> TokenStream {
61 let mut output: TokenStream = (quote! {
62 #[::actix::__private::test(system = "::actix::System")]
63 })
64 .into();
65
66 output.extend(item);
67 output
68}