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 event;
7mod query;
8mod repo;
9mod retry_on_concurrent_modification;
10
11use proc_macro::TokenStream;
12use syn::parse_macro_input;
13
14#[proc_macro_derive(EsEvent, attributes(es_event))]
15pub fn es_event_derive(input: TokenStream) -> TokenStream {
16    let ast = parse_macro_input!(input as syn::DeriveInput);
17    match event::derive(ast) {
18        Ok(tokens) => tokens.into(),
19        Err(e) => e.write_errors().into(),
20    }
21}
22
23#[proc_macro_attribute]
24pub fn retry_on_concurrent_modification(args: TokenStream, input: TokenStream) -> TokenStream {
25    let ast = parse_macro_input!(input as syn::ItemFn);
26    match retry_on_concurrent_modification::make(args, ast) {
27        Ok(tokens) => tokens.into(),
28        Err(e) => e.write_errors().into(),
29    }
30}
31
32#[proc_macro_derive(EsEntity, attributes(es_entity))]
33pub fn es_entity_derive(input: TokenStream) -> TokenStream {
34    let ast = parse_macro_input!(input as syn::DeriveInput);
35    match entity::derive(ast) {
36        Ok(tokens) => tokens.into(),
37        Err(e) => e.write_errors().into(),
38    }
39}
40
41#[proc_macro_derive(EsRepo, attributes(es_repo))]
42pub fn es_repo_derive(input: TokenStream) -> TokenStream {
43    let ast = parse_macro_input!(input as syn::DeriveInput);
44    match repo::derive(ast) {
45        Ok(tokens) => tokens.into(),
46        Err(e) => e.write_errors().into(),
47    }
48}
49
50#[proc_macro]
51#[doc(hidden)]
52pub fn expand_es_query(input: TokenStream) -> TokenStream {
53    let input = parse_macro_input!(input as query::QueryInput);
54    match query::expand(input) {
55        Ok(tokens) => tokens.into(),
56        Err(e) => e.write_errors().into(),
57    }
58}