1mod application;
20mod command;
21mod component;
22mod controller;
23mod diagnostic;
24mod event;
25mod field_shape;
26mod job;
27mod job_handler;
28mod listener;
29mod middleware;
30mod model;
31mod module;
32mod page;
33mod page_macro;
34mod policy;
35mod provider;
36mod redirect;
37mod request;
38mod request_cache;
39mod resource;
40mod route_model;
41mod routes;
42mod schema;
43mod service;
44mod signature;
45mod test_attr;
46mod util;
47
48use proc_macro::TokenStream;
49
50use crate::diagnostic::MacroResult;
51
52fn finish(result: MacroResult) -> TokenStream {
57 match result {
58 Ok(tokens) => tokens.into(),
59 Err(error) => error.to_compile_error().into(),
60 }
61}
62
63#[proc_macro_attribute]
65pub fn model(attr: TokenStream, item: TokenStream) -> TokenStream {
66 model::model(attr, item)
67}
68
69#[proc_macro_attribute]
71pub fn request(attr: TokenStream, item: TokenStream) -> TokenStream {
72 finish(request::request(attr.into(), item.into()))
73}
74
75#[proc_macro_attribute]
77pub fn controller(attr: TokenStream, item: TokenStream) -> TokenStream {
78 finish(controller::controller(attr.into(), item.into()))
79}
80
81#[proc_macro_derive(Job, attributes(job))]
83pub fn derive_job(input: TokenStream) -> TokenStream {
84 job::derive_job(input)
85}
86
87#[proc_macro_derive(Event)]
89pub fn derive_event(input: TokenStream) -> TokenStream {
90 event::derive_event(input)
91}
92
93#[proc_macro_attribute]
95pub fn listener(attr: TokenStream, item: TokenStream) -> TokenStream {
96 listener::listener(attr, item)
97}
98
99#[proc_macro_derive(DxComponent, attributes(component))]
101pub fn derive_dx_component(input: TokenStream) -> TokenStream {
102 finish(component::derive(input.into()))
103}
104
105#[proc_macro_attribute]
107pub fn service(attr: TokenStream, item: TokenStream) -> TokenStream {
108 finish(service::service(attr.into(), item.into()))
109}
110
111#[proc_macro_attribute]
113pub fn provider(attr: TokenStream, item: TokenStream) -> TokenStream {
114 finish(provider::provider(attr.into(), item.into()))
115}
116
117#[proc_macro_attribute]
119pub fn policy(attr: TokenStream, item: TokenStream) -> TokenStream {
120 finish(policy::policy(attr.into(), item.into()))
121}
122
123#[proc_macro_attribute]
125pub fn middleware(attr: TokenStream, item: TokenStream) -> TokenStream {
126 finish(middleware::middleware(attr.into(), item.into()))
127}
128
129#[proc_macro_attribute]
131pub fn command(attr: TokenStream, item: TokenStream) -> TokenStream {
132 finish(command::command(attr.into(), item.into()))
133}
134
135#[proc_macro_attribute]
137pub fn job_handler(attr: TokenStream, item: TokenStream) -> TokenStream {
138 finish(job_handler::job_handler(attr.into(), item.into()))
139}
140
141#[proc_macro_attribute]
143pub fn route_model(attr: TokenStream, item: TokenStream) -> TokenStream {
144 finish(route_model::route_model(attr.into(), item.into()))
145}
146
147#[proc_macro_attribute]
149pub fn request_cache(attr: TokenStream, item: TokenStream) -> TokenStream {
150 finish(self::request_cache::request_cache(attr.into(), item.into()))
151}
152
153#[proc_macro_attribute]
155pub fn resource(attr: TokenStream, item: TokenStream) -> TokenStream {
156 finish(resource::resource(attr.into(), item.into()))
157}
158
159#[proc_macro_attribute]
161pub fn test(attr: TokenStream, item: TokenStream) -> TokenStream {
162 finish(test_attr::test_attr(attr.into(), item.into()))
163}
164
165#[proc_macro_attribute]
167pub fn page(attr: TokenStream, item: TokenStream) -> TokenStream {
168 finish(page::page(attr.into(), item.into()))
169}
170
171#[proc_macro]
175pub fn page_macro(input: TokenStream) -> TokenStream {
176 finish(self::page_macro::page_macro(input.into()))
177}
178
179#[proc_macro]
181pub fn application(input: TokenStream) -> TokenStream {
182 finish(self::application::application(input.into()))
183}
184
185#[proc_macro]
187pub fn module(input: TokenStream) -> TokenStream {
188 finish(self::module::module(input.into()))
189}
190
191#[proc_macro]
193pub fn routes(input: TokenStream) -> TokenStream {
194 finish(self::routes::routes(input.into()))
195}
196
197#[proc_macro]
199pub fn redirect(input: TokenStream) -> TokenStream {
200 finish(redirect::redirect(input.into()))
201}