luminol_proc_macros/
lib.rs1use proc_macro::TokenStream;
2
3fn resolve_asset_path(path: String) -> String {
4 let path = path.strip_prefix("assets/").unwrap_or(&path);
5
6 let assets_path = std::env::var("LUMINOL_ASSETS_PATH").expect("luminol asset path not present");
7 let assets_path = std::path::PathBuf::from(assets_path);
8
9 let asset_path = assets_path.join(path);
10 asset_path.to_string_lossy().into_owned()
11}
12
13#[proc_macro]
16pub fn include_asset(input: TokenStream) -> TokenStream {
17 let path: syn::LitStr = syn::parse(input).expect("Not a string literal");
18 let path = path.value();
19
20 let asset_path = resolve_asset_path(path);
21
22 let tokens = quote::quote! {
23 include_bytes!(#asset_path)
24 };
25 tokens.into()
26}
27
28#[proc_macro]
29pub fn include_asset_str(input: TokenStream) -> TokenStream {
30 let path: syn::LitStr = syn::parse(input).expect("Not a string literal");
31 let path = path.value();
32
33 let asset_path = resolve_asset_path(path);
34
35 let tokens = quote::quote! {
36 include_str!(#asset_path)
37 };
38 tokens.into()
39}