#[macro_use]
extern crate serde_derive;
extern crate heck;
extern crate toml;
mod aperror;
mod basetype;
mod colbool;
mod colfloat;
mod colint;
mod coljoin;
mod collabel;
mod colobject;
mod colstr;
mod colvariant;
mod config;
mod index;
mod langc;
mod langrust;
mod language;
mod lint;
mod log;
mod table;
use clap::{Parser, ValueEnum};
use std::path::Path;
#[derive(Parser, Debug)]
#[command(author, version, about, long_about = None)]
struct Args {
path: String,
#[arg(short, long, default_value = "")]
indir: String,
#[arg(short, long, default_value = "")]
dest: String,
#[arg(long)]
lint: bool,
#[arg(long)]
rebuild: bool,
#[arg(value_enum, default_value = "warning")]
log: LogLevel,
}
#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, ValueEnum, Debug)]
enum LogLevel {
Silent,
Warning,
Standard,
Verbose,
}
fn main() -> aperror::Result<()> {
let args = Args::parse();
log::set_level(match args.log {
LogLevel::Silent => log::Level::Off,
LogLevel::Warning => log::Level::Warning,
LogLevel::Standard => log::Level::Standard,
LogLevel::Verbose => log::Level::Verbose,
});
let runtime = config::Runtime::read(Path::new(&args.path))
.indir(args.indir)
.dest(args.dest);
let project = runtime.into_project()?;
if !args.lint && (args.rebuild || project.modified()) {
project.emit()?;
}
Ok(())
}
#[allow(dead_code)]
fn code_used_only_by_lib() {
config::Runtime::from_toml("".to_string(), Path::new(""));
}