awto_macros/
lib.rs

1//! <div align="center">
2//!   <h1>awto</h1>
3//!
4//!   <p>
5//!     <strong>Awtomate your 🦀 microservices with awto</strong>
6//!   </p>
7//!
8//! </div>
9//!
10//! # awto-macros
11//!
12//! This crate provides macros used by [`awto`](https://docs.rs/awto).
13//!
14//! See more on the [repository](https://github.com/awto-rs/awto).
15
16mod attributes;
17mod error;
18mod proc_macros;
19mod util;
20
21#[proc_macro_attribute]
22pub fn protobuf_service(
23    _args: proc_macro::TokenStream,
24    input: proc_macro::TokenStream,
25) -> proc_macro::TokenStream {
26    let input = syn::parse_macro_input!(
27        input as <crate::proc_macros::ProtobufService as crate::util::ProcMacro>::Input
28    );
29
30    let impl_span = input.impl_token.span;
31
32    match <crate::proc_macros::ProtobufService as crate::util::ProcMacro>::new(input) {
33        Ok(proc) => crate::util::ProcMacro::expand(proc)
34            .unwrap_or_else(syn::Error::into_compile_error)
35            .into(),
36        Err(err) => err.into_compile_error(Some(impl_span)),
37    }
38}
39
40#[proc_macro]
41pub fn schema(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
42    let input = syn::parse_macro_input!(
43        input as <crate::proc_macros::Schema as crate::util::ProcMacro>::Input
44    );
45
46    match <crate::proc_macros::Schema as crate::util::ProcMacro>::new(input) {
47        Ok(proc) => crate::util::ProcMacro::expand(proc)
48            .unwrap_or_else(syn::Error::into_compile_error)
49            .into(),
50        Err(err) => err.into_compile_error(None),
51    }
52}