stak_minifier_macro/
lib.rs1extern crate alloc;
4
5use alloc::str;
6use core::error::Error;
7use proc_macro::TokenStream;
8use proc_macro2::Literal;
9use quote::quote;
10use stak_macro_util::{convert_result, read_source_file};
11use syn::{LitStr, parse_macro_input};
12
13#[proc_macro]
23pub fn minify(input: TokenStream) -> TokenStream {
24    let input = parse_macro_input!(input as LitStr);
25
26    convert_result(minify_source(&input.value())).into()
27}
28
29#[proc_macro]
39pub fn include_minified(input: TokenStream) -> TokenStream {
40    let input = parse_macro_input!(input as LitStr);
41
42    convert_result((|| minify_source(&read_source_file(input)?))()).into()
43}
44
45fn minify_source(source: &str) -> Result<proc_macro2::TokenStream, Box<dyn Error>> {
46    let mut buffer = vec![];
47
48    stak_minifier::minify(source.as_bytes(), &mut buffer)?;
49
50    let target = Literal::string(str::from_utf8(&buffer)?);
51
52    Ok(quote! { #target })
53}