extern crate proc_macro;
mod ast;
mod generator;
use crate::ast::{Object, Service, Workflow};
use crate::generator::ServiceGenerator;
use proc_macro::TokenStream;
use quote::ToTokens;
use syn::parse_macro_input;
#[proc_macro_attribute]
pub fn service(_: TokenStream, input: TokenStream) -> TokenStream {
let svc = parse_macro_input!(input as Service);
ServiceGenerator::new_service(&svc)
.into_token_stream()
.into()
}
#[proc_macro_attribute]
pub fn object(_: TokenStream, input: TokenStream) -> TokenStream {
let svc = parse_macro_input!(input as Object);
ServiceGenerator::new_object(&svc)
.into_token_stream()
.into()
}
#[proc_macro_attribute]
pub fn workflow(_: TokenStream, input: TokenStream) -> TokenStream {
let svc = parse_macro_input!(input as Workflow);
ServiceGenerator::new_workflow(&svc)
.into_token_stream()
.into()
}