bevy_interleave_macros/
lib.rs1extern crate proc_macro;
2
3use proc_macro::TokenStream;
4use syn::{
5 DeriveInput,
6 parse_macro_input,
7};
8
9
10mod planar;
11use planar::generate_planar_struct;
12
13#[proc_macro_derive(Planar)]
14pub fn planar_macro_derive(input: TokenStream) -> TokenStream {
15 let input = parse_macro_input!(input as DeriveInput);
16
17 let output = match generate_planar_struct(&input) {
18 Ok(quote) => quote,
19 Err(e) => return e.to_compile_error().into(),
20 };
21
22 TokenStream::from(output)
23}
24
25
26mod packed;
27use packed::generate_reflect_interleaved;
28
29#[proc_macro_derive(ReflectInterleaved)]
30pub fn reflect_interleaved_macro_derive(input: TokenStream) -> TokenStream {
31 let input = parse_macro_input!(input as DeriveInput);
32
33 let output = match generate_reflect_interleaved(&input) {
34 Ok(quote) => quote,
35 Err(e) => return e.to_compile_error().into(),
36 };
37
38 TokenStream::from(output)
39}
40
41
42mod bindings;
43use bindings::storage::storage_bindings;
44
45#[proc_macro_derive(StorageBindings)]
46pub fn storage_bindings_macro_derive(input: TokenStream) -> TokenStream {
47 let input = parse_macro_input!(input as DeriveInput);
48
49 let output = match storage_bindings(&input) {
50 Ok(quote) => quote,
51 Err(e) => return e.to_compile_error().into(),
52 };
53
54 TokenStream::from(output)
55}
56
57
58use bindings::texture::texture_bindings;
59
60#[proc_macro_derive(TextureBindings, attributes(texture_format))]
61pub fn texture_bindings_macro_derive(input: TokenStream) -> TokenStream {
62 let input = parse_macro_input!(input as DeriveInput);
63
64 let output = match texture_bindings(&input) {
65 Ok(quote) => quote,
66 Err(e) => return e.to_compile_error().into(),
67 };
68
69 TokenStream::from(output)
70}