web_glitz_macros/
lib.rs

1#![recursion_limit = "128"]
2
3extern crate proc_macro;
4
5use proc_macro::TokenStream;
6use proc_macro2;
7use quote::quote;
8use syn::{parse_macro_input, DeriveInput};
9
10mod interface_block;
11mod resources;
12mod transform_feedback;
13mod util;
14mod vertex;
15
16#[proc_macro_derive(InterfaceBlock)]
17pub fn derive_interface_block(input: TokenStream) -> TokenStream {
18    let input = parse_macro_input!(input as DeriveInput);
19
20    interface_block::expand_derive_interface_block(&input)
21        .unwrap_or_else(compile_error)
22        .into()
23}
24
25#[proc_macro_derive(Resources, attributes(resource))]
26pub fn derive_resources(input: TokenStream) -> TokenStream {
27    let input = parse_macro_input!(input as DeriveInput);
28
29    resources::expand_derive_resources(&input)
30        .unwrap_or_else(compile_error)
31        .into()
32}
33
34#[proc_macro_derive(TransformFeedback)]
35pub fn derive_transform_feedback(input: TokenStream) -> TokenStream {
36    let input = parse_macro_input!(input as DeriveInput);
37
38    transform_feedback::expand_derive_transform_feedback(&input).into()
39}
40
41#[proc_macro_derive(Vertex, attributes(vertex_attribute))]
42pub fn derive_vertex(input: TokenStream) -> TokenStream {
43    let input = parse_macro_input!(input as DeriveInput);
44
45    vertex::expand_derive_vertex(&input)
46        .unwrap_or_else(compile_error)
47        .into()
48}
49
50fn compile_error(message: String) -> proc_macro2::TokenStream {
51    quote! {
52        compile_error!(#message);
53    }
54}