askama-minify 0.3.1

A procedural macro for minifying Askama templates at compile time
Documentation
use crate::args::MacroArgs;
use crate::item::reject_existing_template_attr;
use crate::loader::{load_template, minify_template_source};
use proc_macro2::{Span, TokenStream as TokenStream2};
use quote::quote;
use syn::{Attribute, DeriveInput, LitStr, parse_quote};

pub(crate) fn expand_template_minify(
    args: MacroArgs,
    mut item: DeriveInput,
) -> syn::Result<TokenStream2> {
    reject_existing_template_attr(&item)?;

    let template = load_template(&args)?;
    let source = LitStr::new(
        &minify_template_source(&template.source, &template.ext),
        Span::call_site(),
    );
    let ext = LitStr::new(&template.ext, Span::call_site());
    let passthrough = args.passthrough;

    let template_attr: Attribute = parse_quote! {
        #[template(source = #source, ext = #ext #(, #passthrough)*)]
    };
    item.attrs.push(template_attr);

    let tracking = template.include_path.map(|path| {
        let path = LitStr::new(&path.to_string_lossy(), Span::call_site());
        quote! {
            const _: &str = include_str!(#path);
        }
    });

    Ok(quote! {
        #item
        #tracking
    })
}