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
extern crate proc_macro;
mod generate;
mod key_map;
mod parse;
use self::{generate::*, parse::*};
use proc_macro::TokenStream;
use quote::quote;
use std::str::FromStr;
#[proc_macro]
pub fn parse_keycode_converter_data(_input: TokenStream) -> TokenStream {
let output = if let Ok(input) =
TokenStream::from_str(&include_str!("../keycode_converter_data.inc").to_string())
{
let input = proc_macro2::TokenStream::from(input);
match parse(input) {
Ok(key_maps) => generate(key_maps),
Err(err) => {
let err_string = err.to_string();
quote! {
compile_error!(#err_string)
}
}
}
} else {
quote! {
compile_error!("Could not parse `keycode_converter_data.inc` file into a `TokenStream`")
}
};
TokenStream::from(output)
}