use proc_macro2::TokenStream as TokenStream2;
use crate::{
macros::{config::trixy::TrixyConfig, VIM_LINE_RUST},
parser::command_spec::CommandSpec,
};
pub mod c;
pub mod rust;
pub fn format_rust(input: TokenStream2) -> String {
prettyplease::unparse(
&syn::parse2(input.clone())
.map_err(|err| {
eprintln!("{}:\n===\n{}\n===\n", err, input);
})
.expect("This code was generated, it should also be parsable"),
)
}
pub fn generate(trixy: &CommandSpec, config: &TrixyConfig) -> String {
let rust_host = rust::generate(trixy, config);
let c_host = c::generate(trixy, config);
format!(
"\
// Host code\n\
{}\
{}\
{}",
rust_host, c_host, VIM_LINE_RUST
)
}