hollywood_macros/
lib.rs

1#![deny(missing_docs)]
2
3//! Convenience macros for the Hollywood actor framework.
4
5mod actors;
6mod core;
7
8extern crate proc_macro;
9
10use proc_macro::TokenStream;
11use quote::quote;
12
13// The macros are documented in the root-level hollywood crate - so that links are generated
14// correctly.
15#[allow(missing_docs)]
16#[proc_macro_attribute]
17pub fn actor_outputs(attr: TokenStream, item: TokenStream) -> TokenStream {
18    core::actor_outputs_impl(
19        proc_macro2::TokenStream::from(attr),
20        proc_macro2::TokenStream::from(item),
21    )
22    .into()
23}
24
25// See above.
26#[allow(missing_docs)]
27#[proc_macro_attribute]
28pub fn actor_out_requests(attr: TokenStream, item: TokenStream) -> TokenStream {
29    core::actor_out_requests_impl(
30        proc_macro2::TokenStream::from(attr),
31        proc_macro2::TokenStream::from(item),
32    )
33    .into()
34}
35
36// See above.
37#[allow(missing_docs)]
38#[proc_macro_attribute]
39pub fn actor_inputs(args: TokenStream, inbound: TokenStream) -> TokenStream {
40    core::actor_inputs_impl(
41        proc_macro2::TokenStream::from(args),
42        proc_macro2::TokenStream::from(inbound),
43    )
44    .into()
45}
46
47// See above.
48#[allow(missing_docs)]
49#[proc_macro_attribute]
50pub fn actor_in_requests(attr: TokenStream, item: TokenStream) -> TokenStream {
51    core::actor_in_requests_impl(
52        proc_macro2::TokenStream::from(attr),
53        proc_macro2::TokenStream::from(item),
54    )
55    .into()
56}
57
58// See above.
59#[allow(missing_docs)]
60#[proc_macro_attribute]
61pub fn actor(attr: TokenStream, item: TokenStream) -> TokenStream {
62    core::actor_impl(
63        proc_macro2::TokenStream::from(attr),
64        proc_macro2::TokenStream::from(item),
65    )
66    .into()
67}
68
69// See above.
70#[allow(missing_docs)]
71#[proc_macro]
72pub fn zip_n(input: TokenStream) -> TokenStream {
73    let parsed = proc_macro2::TokenStream::from(input.clone());
74    let parsed2 = parsed.clone();
75    let parsed3 = parsed.clone();
76    let parsed4 = parsed.clone();
77    let parsed5 = parsed.clone();
78    let parsed6 = parsed.clone();
79    let parsed7 = parsed.clone();
80
81    let output_tuple_n = actors::zip::tuple_n_impl(parsed);
82    let output_zip_outbound_n = actors::zip::zip_outbound_n_impl(parsed2);
83    let output_zip_state_n = actors::zip::zip_state_n_impl(parsed3);
84    let output_inbound_message_n = actors::zip::zip_inbound_message_n_impl(parsed4);
85    let output_zip_n = actors::zip::zip_n_impl(parsed5);
86    let output_zip_inbound_n = actors::zip::zip_inbound_n_impl(parsed6);
87    let output_zip_onmessage_n_new = actors::zip::zip_onmessage_n_impl(parsed7);
88
89    let combined_output = quote! {
90        #output_tuple_n
91        #output_zip_outbound_n
92        #output_zip_state_n
93        #output_inbound_message_n
94        #output_zip_n
95        #output_zip_inbound_n
96        #output_zip_onmessage_n_new
97    };
98
99    TokenStream::from(combined_output)
100}