1extern crate proc_macro;
2
3use proc_macro::TokenStream;
4use proc_macro2;
5use quote::quote;
6use syn::{parse_macro_input, DeriveInput};
7
8mod repr_std140;
9
10#[proc_macro_attribute]
11pub fn repr_std140(args: TokenStream, input: TokenStream) -> TokenStream {
12 assert!(args.is_empty(), "#[repr_std140] does not take arguments.");
13
14 let input = parse_macro_input!(input as DeriveInput);
15
16 repr_std140::expand_repr_std140(&input)
17 .unwrap_or_else(compile_error)
18 .into()
19}
20
21fn compile_error(message: String) -> proc_macro2::TokenStream {
22 quote! {
23 compile_error!(#message);
24 }
25}