* wiggle-generate: pass witx doc in explicitly * wiggle-generate: Names takes &Config, minor refactor for reuse
45 lines
1.1 KiB
Rust
45 lines
1.1 KiB
Rust
mod config;
|
|
mod funcs;
|
|
mod lifetimes;
|
|
mod module_trait;
|
|
mod names;
|
|
mod types;
|
|
|
|
use proc_macro2::TokenStream;
|
|
use quote::quote;
|
|
|
|
pub use config::Config;
|
|
pub use funcs::define_func;
|
|
pub use module_trait::define_module_trait;
|
|
pub use names::Names;
|
|
pub use types::define_datatype;
|
|
|
|
pub fn generate(doc: &witx::Document, config: &Config) -> TokenStream {
|
|
let names = Names::new(config); // TODO parse the names from the invocation of the macro, or from a file?
|
|
|
|
let types = doc.typenames().map(|t| define_datatype(&names, &t));
|
|
|
|
let modules = doc.modules().map(|module| {
|
|
let modname = names.module(&module.name);
|
|
let fs = module.funcs().map(|f| define_func(&names, &f));
|
|
let modtrait = define_module_trait(&names, &module);
|
|
let ctx_type = names.ctx_type();
|
|
quote!(
|
|
pub mod #modname {
|
|
use super::#ctx_type;
|
|
use super::types::*;
|
|
#(#fs)*
|
|
|
|
#modtrait
|
|
}
|
|
)
|
|
});
|
|
|
|
quote!(
|
|
pub mod types {
|
|
#(#types)*
|
|
}
|
|
#(#modules)*
|
|
)
|
|
}
|