sword-macros 0.2.1

Structured web framework built on top of tokio ecosystem, providing powerful features for building robust web applications.
Documentation
mod generation;

use proc_macro::TokenStream;
use quote::quote;
use syn::ItemStruct;

use crate::shared::{CMetaStack, CommonHttpAdapterInput};
use generation::generate_controller_builder;

pub fn expand_controller(
    attr: TokenStream,
    item: TokenStream,
) -> syn::Result<TokenStream> {
    let input = syn::parse::<ItemStruct>(item.clone())?;
    let parsed_input = CommonHttpAdapterInput::parse(attr, item)?;

    let struct_name = parsed_input.struct_name.to_string();
    let base_path = &parsed_input.base_path;

    CMetaStack::push("controller_name", &struct_name);
    CMetaStack::push("controller_path", base_path);

    let builder = generate_controller_builder(&parsed_input);

    let expanded = quote! {
        #input
        #builder
    };

    Ok(TokenStream::from(expanded))
}