Skip to main content

bevy_material_macros/
lib.rs

1#![expect(missing_docs, reason = "Not all docs are written yet, see #3492.")]
2#![cfg_attr(docsrs, feature(doc_cfg))]
3
4use bevy_macro_utils::{derive_label, BevyManifest};
5use proc_macro::TokenStream;
6use quote::format_ident;
7use syn::{parse_macro_input, DeriveInput};
8
9pub(crate) fn bevy_material_path() -> syn::Path {
10    BevyManifest::shared(|manifest| manifest.get_path("bevy_material"))
11}
12
13#[proc_macro_derive(ShaderLabel)]
14pub fn derive_shader_label(input: TokenStream) -> TokenStream {
15    let input = parse_macro_input!(input as DeriveInput);
16    let mut trait_path = bevy_material_path();
17    trait_path.segments.push(format_ident!("labels").into());
18    trait_path
19        .segments
20        .push(format_ident!("ShaderLabel").into());
21    derive_label(input, "ShaderLabel", &trait_path)
22}
23
24#[proc_macro_derive(DrawFunctionLabel)]
25pub fn derive_draw_function_label(input: TokenStream) -> TokenStream {
26    let input = parse_macro_input!(input as DeriveInput);
27    let mut trait_path = bevy_material_path();
28    trait_path.segments.push(format_ident!("labels").into());
29    trait_path
30        .segments
31        .push(format_ident!("DrawFunctionLabel").into());
32    derive_label(input, "DrawFunctionLabel", &trait_path)
33}