mod application;
mod command;
mod component;
mod controller;
mod diagnostic;
mod event;
mod field_shape;
mod job;
mod job_handler;
mod listener;
mod middleware;
mod model;
mod module;
mod page;
mod page_macro;
mod policy;
mod provider;
mod redirect;
mod request;
mod request_cache;
mod resource;
mod route_model;
mod routes;
mod schema;
mod service;
mod signature;
mod test_attr;
mod util;
use proc_macro::TokenStream;
use crate::diagnostic::MacroResult;
fn finish(result: MacroResult) -> TokenStream {
match result {
Ok(tokens) => tokens.into(),
Err(error) => error.to_compile_error().into(),
}
}
#[proc_macro_attribute]
pub fn model(attr: TokenStream, item: TokenStream) -> TokenStream {
model::model(attr, item)
}
#[proc_macro_attribute]
pub fn request(attr: TokenStream, item: TokenStream) -> TokenStream {
finish(request::request(attr.into(), item.into()))
}
#[proc_macro_attribute]
pub fn controller(attr: TokenStream, item: TokenStream) -> TokenStream {
finish(controller::controller(attr.into(), item.into()))
}
#[proc_macro_derive(Job, attributes(job))]
pub fn derive_job(input: TokenStream) -> TokenStream {
job::derive_job(input)
}
#[proc_macro_derive(Event)]
pub fn derive_event(input: TokenStream) -> TokenStream {
event::derive_event(input)
}
#[proc_macro_attribute]
pub fn listener(attr: TokenStream, item: TokenStream) -> TokenStream {
listener::listener(attr, item)
}
#[proc_macro_derive(DxComponent, attributes(component))]
pub fn derive_dx_component(input: TokenStream) -> TokenStream {
finish(component::derive(input.into()))
}
#[proc_macro_attribute]
pub fn service(attr: TokenStream, item: TokenStream) -> TokenStream {
finish(service::service(attr.into(), item.into()))
}
#[proc_macro_attribute]
pub fn provider(attr: TokenStream, item: TokenStream) -> TokenStream {
finish(provider::provider(attr.into(), item.into()))
}
#[proc_macro_attribute]
pub fn policy(attr: TokenStream, item: TokenStream) -> TokenStream {
finish(policy::policy(attr.into(), item.into()))
}
#[proc_macro_attribute]
pub fn middleware(attr: TokenStream, item: TokenStream) -> TokenStream {
finish(middleware::middleware(attr.into(), item.into()))
}
#[proc_macro_attribute]
pub fn command(attr: TokenStream, item: TokenStream) -> TokenStream {
finish(command::command(attr.into(), item.into()))
}
#[proc_macro_attribute]
pub fn job_handler(attr: TokenStream, item: TokenStream) -> TokenStream {
finish(job_handler::job_handler(attr.into(), item.into()))
}
#[proc_macro_attribute]
pub fn route_model(attr: TokenStream, item: TokenStream) -> TokenStream {
finish(route_model::route_model(attr.into(), item.into()))
}
#[proc_macro_attribute]
pub fn request_cache(attr: TokenStream, item: TokenStream) -> TokenStream {
finish(self::request_cache::request_cache(attr.into(), item.into()))
}
#[proc_macro_attribute]
pub fn resource(attr: TokenStream, item: TokenStream) -> TokenStream {
finish(resource::resource(attr.into(), item.into()))
}
#[proc_macro_attribute]
pub fn test(attr: TokenStream, item: TokenStream) -> TokenStream {
finish(test_attr::test_attr(attr.into(), item.into()))
}
#[proc_macro_attribute]
pub fn page(attr: TokenStream, item: TokenStream) -> TokenStream {
finish(page::page(attr.into(), item.into()))
}
#[proc_macro]
pub fn page_macro(input: TokenStream) -> TokenStream {
finish(self::page_macro::page_macro(input.into()))
}
#[proc_macro]
pub fn application(input: TokenStream) -> TokenStream {
finish(self::application::application(input.into()))
}
#[proc_macro]
pub fn module(input: TokenStream) -> TokenStream {
finish(self::module::module(input.into()))
}
#[proc_macro]
pub fn routes(input: TokenStream) -> TokenStream {
finish(self::routes::routes(input.into()))
}
#[proc_macro]
pub fn redirect(input: TokenStream) -> TokenStream {
finish(redirect::redirect(input.into()))
}