1extern crate proc_macro;
2
3mod generate;
4mod key_map;
5mod parse;
6
7use self::{generate::*, parse::*};
8use core::str::FromStr;
9use proc_macro::TokenStream;
10use quote::quote;
11
12#[proc_macro]
13pub fn parse_keycode_converter_data(_input: TokenStream) -> TokenStream {
14 let output = if let Ok(input) =
15 TokenStream::from_str(&include_str!("../keycode_converter_data.inc").to_string())
16 {
17 let input = proc_macro2::TokenStream::from(input);
18
19 match parse(input) {
20 Ok(key_maps) => generate(key_maps),
21 Err(err) => {
22 let err_string = err.to_string();
23 quote! {
24 compile_error!(#err_string)
25 }
26 }
27 }
28 } else {
29 quote! {
30 compile_error!("Could not parse `keycode_converter_data.inc` file into a `TokenStream`")
31 }
32 };
33
34 TokenStream::from(output)
35}