bevy_interleave_macros/
lib.rs

1extern 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}