kconfig_impl/
lib.rs

1use std::str::FromStr;
2
3use kconfig_compiler::{kcfg_to_tokenstream, kcfgc::Kcfgc};
4use syn::{parse_macro_input, ExprLit, Lit};
5
6#[proc_macro]
7pub fn kcfg_inline(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
8    let input = parse_macro_input!(input as ExprLit);
9    match input.lit {
10        Lit::Str(xml) => kcfg_to_tokenstream(&Kcfgc::default(), xml.value().as_str())
11            .unwrap()
12            .into(),
13        _ => panic!("Not valid Input"),
14    }
15}
16
17#[proc_macro]
18pub fn kcfgc_inline(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
19    let input = parse_macro_input!(input as ExprLit);
20    let x = match input.lit {
21        Lit::Str(kcfgc) => Kcfgc::from_str(kcfgc.value().as_str()).unwrap(),
22        _ => panic!("Invalid Input for kcfgc"),
23    };
24    let kcfg = x.get_kcfg_contents().unwrap();
25    kcfg_to_tokenstream(&x, &kcfg).unwrap().into()
26}
27
28#[proc_macro]
29pub fn kcfgc(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
30    let input = parse_macro_input!(input as ExprLit);
31    let x = match input.lit {
32        Lit::Str(file) => Kcfgc::from_file(file.value().as_str()).unwrap(),
33        _ => panic!("Invalid Input for kcfgc"),
34    };
35    let kcfg = x.get_kcfg_contents().unwrap();
36    kcfg_to_tokenstream(&x, &kcfg).unwrap().into()
37}