evenio_macros/
lib.rs

1#![doc = include_str!("../README.md")]
2
3use proc_macro::TokenStream;
4
5mod all_tuples;
6mod component;
7mod event;
8mod handler_param;
9mod query;
10mod util;
11
12/// Helper macro which repeatedly invokes a given macro with an increasing list
13/// of identifiers.
14///
15/// Invoked with `all_tuples!(my_macro, start, end, A, B, ...)` where `start`
16/// and `end` are integer literals and `A`, `B`, ... are identifiers.
17///
18/// `all_tuples!(my_macro, 0, 15, A)` expands to:
19///
20/// ```ignore
21/// my_macro!();
22/// my_macro!(A0);
23/// my_macro!(A0, A1);
24/// my_macro!(A0, A1, A2);
25/// ...
26/// my_macro!(A0, ..., A14);
27/// ```
28///
29/// Now with multiple identifiers. `all_tuples!(my_macro, 0, 15, A, a)` expands
30/// to:
31///
32/// ```ignore
33/// my_macro!();
34/// my_macro!((A0, a0));
35/// my_macro!((A0, a0), (A1, a1));
36/// my_macro!((A0, a0), (A1, a1), (A2, a2));
37/// ...
38/// my_macro!((A0, a0), ..., (A14, a14));
39/// ```
40#[proc_macro]
41pub fn all_tuples(input: TokenStream) -> TokenStream {
42    all_tuples::all_tuples(input)
43}
44
45/// Derive macro for `Event`. See `Event` and `GlobalEvent`'s documentation for
46/// more information.
47#[proc_macro_derive(GlobalEvent, attributes(event))]
48pub fn derive_global_event(input: TokenStream) -> TokenStream {
49    event::derive_event(input.into(), false)
50        .unwrap_or_else(|e| e.into_compile_error())
51        .into()
52}
53
54/// Derive macro for `Event`. See `Event` and `TargetedEvent`'s documentation
55/// for more information.
56#[proc_macro_derive(TargetedEvent, attributes(event))]
57pub fn derive_targeted_event(input: TokenStream) -> TokenStream {
58    event::derive_event(input.into(), true)
59        .unwrap_or_else(|e| e.into_compile_error())
60        .into()
61}
62
63/// Derive macro for `Component`. See `Component`'s documentation for more
64/// information.
65#[proc_macro_derive(Component, attributes(component))]
66pub fn derive_component(input: TokenStream) -> TokenStream {
67    component::derive_component(input.into())
68        .unwrap_or_else(|e| e.into_compile_error())
69        .into()
70}
71
72/// Derive macro for `Query`. See `Query`'s documentation for more
73/// information.
74#[proc_macro_derive(Query, attributes(query))]
75pub fn derive_query(input: TokenStream) -> TokenStream {
76    query::derive_query(input.into())
77        .unwrap_or_else(|e| e.into_compile_error())
78        .into()
79}
80
81/// Derive macro for `HandlerParam`. See `HandlerParam`'s documentation for more
82/// information.
83#[proc_macro_derive(HandlerParam)]
84pub fn derive_handler_param(input: TokenStream) -> TokenStream {
85    handler_param::derive_handler_param(input.into())
86        .unwrap_or_else(|e| e.into_compile_error())
87        .into()
88}