runa_wayland_scanner_macros/
lib.rs1use proc_macro_error::ResultExt;
2#[proc_macro]
3pub fn generate_protocol(tokens: proc_macro::TokenStream) -> proc_macro::TokenStream {
4 use std::io::Read;
5 let tokens2 = tokens.clone();
6 let path = syn::parse_macro_input!(tokens2 as syn::LitStr);
7 let path =
8 std::path::Path::new(&std::env::var("CARGO_WORKSPACE_DIR").unwrap()).join(path.value());
9 let tokens: proc_macro2::TokenStream = tokens.into();
10 let mut file = std::fs::File::open(path)
11 .map_err(|e| syn::Error::new_spanned(&tokens, e))
12 .unwrap_or_abort();
13 let mut contents = String::new();
14 file.read_to_string(&mut contents)
15 .map_err(|e| syn::Error::new_spanned(&tokens, e))
16 .unwrap_or_abort();
17 let protocol = parser::parse::parse(contents.as_bytes()).unwrap();
18 codegen::generate_protocol(&protocol).unwrap().into()
19}