es_entity_macros/
lib.rs

1#![cfg_attr(feature = "fail-on-warnings", deny(warnings))]
2#![cfg_attr(feature = "fail-on-warnings", deny(clippy::all))]
3#![forbid(unsafe_code)]
4
5mod entity;
6mod es_event_context;
7mod event;
8mod query;
9mod repo;
10mod retry_on_concurrent_modification;
11
12use proc_macro::TokenStream;
13use syn::parse_macro_input;
14
15#[proc_macro_derive(EsEvent, attributes(es_event))]
16pub fn es_event_derive(input: TokenStream) -> TokenStream {
17    let ast = parse_macro_input!(input as syn::DeriveInput);
18    match event::derive(ast) {
19        Ok(tokens) => tokens.into(),
20        Err(e) => e.write_errors().into(),
21    }
22}
23
24#[proc_macro_attribute]
25pub fn retry_on_concurrent_modification(args: TokenStream, input: TokenStream) -> TokenStream {
26    let ast = parse_macro_input!(input as syn::ItemFn);
27    match retry_on_concurrent_modification::make(args, ast) {
28        Ok(tokens) => tokens.into(),
29        Err(e) => e.write_errors().into(),
30    }
31}
32
33#[proc_macro_attribute]
34pub fn es_event_context(args: TokenStream, input: TokenStream) -> TokenStream {
35    let ast = parse_macro_input!(input as syn::ItemFn);
36    match es_event_context::make(args, ast) {
37        Ok(tokens) => tokens.into(),
38        Err(e) => e.write_errors().into(),
39    }
40}
41
42#[proc_macro_derive(EsEntity, attributes(es_entity))]
43pub fn es_entity_derive(input: TokenStream) -> TokenStream {
44    let ast = parse_macro_input!(input as syn::DeriveInput);
45    match entity::derive(ast) {
46        Ok(tokens) => tokens.into(),
47        Err(e) => e.write_errors().into(),
48    }
49}
50
51#[proc_macro_derive(EsRepo, attributes(es_repo))]
52pub fn es_repo_derive(input: TokenStream) -> TokenStream {
53    let ast = parse_macro_input!(input as syn::DeriveInput);
54    match repo::derive(ast) {
55        Ok(tokens) => tokens.into(),
56        Err(e) => e.write_errors().into(),
57    }
58}
59
60#[proc_macro]
61#[doc(hidden)]
62pub fn expand_es_query(input: TokenStream) -> TokenStream {
63    let input = parse_macro_input!(input as query::QueryInput);
64    match query::expand(input) {
65        Ok(tokens) => tokens.into(),
66        Err(e) => e.write_errors().into(),
67    }
68}