use crml_core;
use std::fs::{read_to_string, write, File};
use serde::{Serialize, Deserialize};
use pathbufd::PathBufD;
#[derive(Serialize, Deserialize, Clone)]
pub struct Config {
pub output_dir: PathBufD,
pub root_dir: PathBufD,
pub include: Vec<(String, String)>,
}
fn main() {
let config: Config = serde_json::from_str(
&read_to_string(PathBufD::current().join("crml.json"))
.expect("failed to read configuration"),
)
.expect("failed to deserialize configuration");
let mut out = format!("// This file is @generated.\nmod data;\nuse data::*;\n");
for file in config.include {
let fs_file = File::open(PathBufD::current().extend(&[
config.root_dir.to_string(),
format!("{}.crml", file.0.clone()),
]))
.expect("failed to read included file");
out.push_str(&crml_core::generator::Generator::from_file(fs_file).consume(file.0, file.1));
}
write(
PathBufD::current().extend(&[config.output_dir.to_string(), "mod.rs".to_string()]),
out,
)
.expect("failed to write output file")
}