a3s-boot-macros 0.1.2

Attribute macros for a3s-boot
Documentation
use proc_macro::TokenStream;
use quote::quote;

pub(crate) fn route_attribute_outside_controller(name: &str, item: TokenStream) -> TokenStream {
    let item = proc_macro2::TokenStream::from(item);
    let message = format!(
        "#[{name}] must be used inside an impl block annotated with #[controller], #[message_controller], or #[websocket_gateway]"
    );
    quote! {
        compile_error!(#message);
        #item
    }
    .into()
}

pub(crate) fn extractor_attribute_outside_controller(name: &str, item: TokenStream) -> TokenStream {
    let item = proc_macro2::TokenStream::from(item);
    let message = format!("#[{name}] must be used on a route method argument inside #[controller]");
    quote! {
        compile_error!(#message);
        #item
    }
    .into()
}

pub(crate) fn protocol_extractor_attribute_outside(name: &str, item: TokenStream) -> TokenStream {
    let item = proc_macro2::TokenStream::from(item);
    let message = format!(
        "#[{name}] must be used on a protocol handler argument inside #[message_controller] or #[websocket_gateway]"
    );
    quote! {
        compile_error!(#message);
        #item
    }
    .into()
}

pub(crate) fn openapi_attribute_outside_controller(name: &str, item: TokenStream) -> TokenStream {
    let item = proc_macro2::TokenStream::from(item);
    let message =
        format!("#[{name}] must be used inside an impl block annotated with #[controller]");
    quote! {
        compile_error!(#message);
        #item
    }
    .into()
}

pub(crate) fn decorator_attribute_outside_controller(name: &str, item: TokenStream) -> TokenStream {
    let item = proc_macro2::TokenStream::from(item);
    let message =
        format!("#[{name}] must be used inside an impl block annotated with #[controller]");
    quote! {
        compile_error!(#message);
        #item
    }
    .into()
}

pub(crate) fn response_attribute_outside_controller(name: &str, item: TokenStream) -> TokenStream {
    let item = proc_macro2::TokenStream::from(item);
    let message =
        format!("#[{name}] must be used inside an impl block annotated with #[controller]");
    quote! {
        compile_error!(#message);
        #item
    }
    .into()
}

pub(crate) fn render_attribute_outside_controller(name: &str, item: TokenStream) -> TokenStream {
    let item = proc_macro2::TokenStream::from(item);
    let message =
        format!("#[{name}] must be used inside an impl block annotated with #[controller]");
    quote! {
        compile_error!(#message);
        #item
    }
    .into()
}

pub(crate) fn http_code_attribute_outside_controller(name: &str, item: TokenStream) -> TokenStream {
    let item = proc_macro2::TokenStream::from(item);
    let message =
        format!("#[{name}] must be used inside an impl block annotated with #[controller]");
    quote! {
        compile_error!(#message);
        #item
    }
    .into()
}

pub(crate) fn metadata_attribute_outside_controller(name: &str, item: TokenStream) -> TokenStream {
    let item = proc_macro2::TokenStream::from(item);
    let message = format!(
        "#[{name}] must be used inside an impl block annotated with #[controller], #[message_controller], or #[websocket_gateway]"
    );
    quote! {
        compile_error!(#message);
        #item
    }
    .into()
}

pub(crate) fn message_attribute_outside_controller(name: &str, item: TokenStream) -> TokenStream {
    let item = proc_macro2::TokenStream::from(item);
    let message =
        format!("#[{name}] must be used inside an impl block annotated with #[message_controller]");
    quote! {
        compile_error!(#message);
        #item
    }
    .into()
}

pub(crate) fn event_attribute_outside_listener(name: &str, item: TokenStream) -> TokenStream {
    let item = proc_macro2::TokenStream::from(item);
    let message =
        format!("#[{name}] must be used inside an impl block annotated with #[event_listener]");
    quote! {
        compile_error!(#message);
        #item
    }
    .into()
}

pub(crate) fn websocket_attribute_outside_gateway(name: &str, item: TokenStream) -> TokenStream {
    let item = proc_macro2::TokenStream::from(item);
    let message =
        format!("#[{name}] must be used inside an impl block annotated with #[websocket_gateway]");
    quote! {
        compile_error!(#message);
        #item
    }
    .into()
}

pub(crate) fn schedule_attribute_outside_schedule(name: &str, item: TokenStream) -> TokenStream {
    let item = proc_macro2::TokenStream::from(item);
    let message = format!("#[{name}] must be used inside an impl block annotated with #[schedule]");
    quote! {
        compile_error!(#message);
        #item
    }
    .into()
}

pub(crate) fn validation_attribute_outside_controller(
    name: &str,
    item: TokenStream,
) -> TokenStream {
    let item = proc_macro2::TokenStream::from(item);
    let message =
        format!("#[{name}] must be used inside an impl block annotated with #[controller]");
    quote! {
        compile_error!(#message);
        #item
    }
    .into()
}

pub(crate) fn pipeline_attribute_outside_controller(name: &str, item: TokenStream) -> TokenStream {
    let item = proc_macro2::TokenStream::from(item);
    let message = format!(
        "#[{name}] must be used inside an impl block annotated with #[controller], #[message_controller], or #[websocket_gateway]"
    );
    quote! {
        compile_error!(#message);
        #item
    }
    .into()
}

pub(crate) fn host_attribute_outside_controller(name: &str, item: TokenStream) -> TokenStream {
    let item = proc_macro2::TokenStream::from(item);
    let message =
        format!("#[{name}] must be used inside an impl block annotated with #[controller]");
    quote! {
        compile_error!(#message);
        #item
    }
    .into()
}

pub(crate) fn version_attribute_outside_controller(name: &str, item: TokenStream) -> TokenStream {
    let item = proc_macro2::TokenStream::from(item);
    let message =
        format!("#[{name}] must be used inside an impl block annotated with #[controller]");
    quote! {
        compile_error!(#message);
        #item
    }
    .into()
}

pub(crate) fn serialization_attribute_outside_controller(
    name: &str,
    item: TokenStream,
) -> TokenStream {
    let item = proc_macro2::TokenStream::from(item);
    let message =
        format!("#[{name}] must be used inside an impl block annotated with #[controller]");
    quote! {
        compile_error!(#message);
        #item
    }
    .into()
}

pub(crate) fn cache_attribute_outside_controller(name: &str, item: TokenStream) -> TokenStream {
    let item = proc_macro2::TokenStream::from(item);
    let message =
        format!("#[{name}] must be used inside an impl block annotated with #[controller]");
    quote! {
        compile_error!(#message);
        #item
    }
    .into()
}