1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
extern crate proc_macro; mod descriptors; mod repr; mod stage; #[proc_macro_attribute] pub fn descriptors( attr: proc_macro::TokenStream, item: proc_macro::TokenStream, ) -> proc_macro::TokenStream { descriptors::descriptors(attr, item).into() } #[proc_macro_attribute] pub fn shader_repr( attr: proc_macro::TokenStream, item: proc_macro::TokenStream, ) -> proc_macro::TokenStream { repr::shader_repr(attr, item).into() } fn find_unique<I>(iter: I, msg: &'static str) -> Option<I::Item> where I: IntoIterator, { let mut iter = iter.into_iter(); let item = iter.next()?; if iter.next().is_some() { panic!("{}", msg); } Some(item) } fn get_unique<I>(iter: I, msg: &'static str) -> I::Item where I: IntoIterator, { let mut iter = iter.into_iter(); let item = iter.next().expect(msg); if iter.next().is_some() { panic!("{}", msg); } item }