use proc_macro::TokenStream;
use quote::quote;
mod ast;
mod fmt;
mod lower_ast;
mod parse;
pub(crate) struct FormatArgsInput {
pub template: String,
pub values: Vec<ast::LitValue>,
}
#[proc_macro]
pub fn format_args(input: TokenStream) -> TokenStream {
let input = syn::parse_macro_input!(input as FormatArgsInput);
let template = input.template;
let values = input.values;
let output = quote! {
::std::format_args!(#template, #(#values),*)
};
output.into()
}
#[proc_macro]
pub fn format_args_nl(input: TokenStream) -> TokenStream {
let input = syn::parse_macro_input!(input as FormatArgsInput);
let template_with_nl = format!("{}<br>", input.template);
let values = input.values;
let output = quote! {
::std::format_args!(#template_with_nl, #(#values),*)
};
output.into()
}
pub(crate) struct ConcatInput {
pub segments: Vec<proc_macro2::TokenStream>,
}
#[proc_macro]
pub fn concat(input: TokenStream) -> TokenStream {
let input = syn::parse_macro_input!(input as ConcatInput);
let segments = input.segments;
let output = quote! {
::std::concat!(#(#segments),*)
};
output.into()
}