use std::path::PathBuf;
pub use config::{BuildConfig, ModuleDeriveBuilder};
pub const SCHEMA_VERSION: u32 = 1;
pub(crate) use function::*;
pub(crate) use module::*;
pub(crate) use path::*;
pub(crate) use render::*;
mod builder;
mod config;
mod environment;
mod function;
mod module;
mod parser;
mod path;
mod render;
mod visitor;
pub fn build() {
build_with(|_| {});
}
pub fn build_with_specs(specs: impl IntoIterator<Item: AsRef<str>>) {
let mut config = BuildConfig::default();
for spec in specs {
let spec_config = config::build_config_from_json_spec(spec.as_ref())
.expect("config spec string must be valid JSON with a supported schema version");
config.merge(spec_config);
}
build_from_config(config);
}
pub fn build_with(configure: impl FnOnce(&mut BuildConfig)) {
let mut config = BuildConfig::default();
configure(&mut config);
build_from_config(config);
}
fn build_from_config(config: BuildConfig) {
let manifest_dir = PathBuf::from(std::env::var("CARGO_MANIFEST_DIR").unwrap());
builder::build_manifest(
config.pragmas,
&config.derives,
config.module_derives,
manifest_dir.join("Cargo.toml"),
manifest_dir.file_name().unwrap(),
)
}