extern crate lapp;
use std::io;
use std::env;
use std::fs::File;
use std::io::prelude::*;
fn main() {
let lapp_file_spec = env::var("LAPP_FILE").expect("please set LAPP_FILE env var");
let parts: Vec<_> = lapp_file_spec.split_whitespace().collect();
let mode = if parts.len() > 1 { parts[1] } else {""};
let lapp_file = parts[0];
let mut f = File::open(lapp_file).expect(&format!("cannot read {}",lapp_file));
let mut txt = String::new();
f.read_to_string(&mut txt).expect("bad test.lapp");
let mut args = lapp::Args::new(&txt);
if mode == "vars" || mode.starts_with("struct") {
let struct_name = if mode != "vars" {
match mode.find(':') {
Some(idx) => {
let (_,s) = mode.split_at(idx+1);
s
},
None => args.quit("must be struct:STRUCT_NAME")
}
} else {
""
};
let dcls = args.declarations(struct_name);
if mode != "vars" {
let mut f = File::create(&format!("{}.inc",lapp_file)).expect("can't write");
f.write_all(&dcls.into_bytes()).expect("can't write");
} else {
io::stdout().write_all(&dcls.into_bytes()).expect("can't write");
}
} else {
args.dump();
}
}