use clap::Parser;
use gieter_core::config::Config;
use gieter_core::pipeline::{self, Registry, RunReport};
use gieter_core::source::SourceRegistry;
use gieter_typescript::TypescriptEmitter;
use std::path::PathBuf;
#[derive(Parser)]
#[command(name = "gieter", version)]
struct Cli {
#[arg(short, long, default_value = "gieter.toml")]
config: PathBuf,
}
fn main() -> std::process::ExitCode {
match run() {
Ok(report) => {
for warning in &report.warnings {
eprintln!("warning: {warning}");
}
println!("generated {} file(s)", report.written.len());
std::process::ExitCode::SUCCESS
}
Err(error) => {
eprintln!("error: {error}");
std::process::ExitCode::FAILURE
}
}
}
fn run() -> Result<RunReport, Box<dyn std::error::Error>> {
let cli = Cli::parse();
let mut config = Config::from_path(&cli.config)?;
config.resolve_env()?;
let mut sources = SourceRegistry::new();
sources.register("postgres", gieter_postgres::factory);
let source = sources.build(&config.source)?;
let mut registry = Registry::new();
registry.register(Box::new(TypescriptEmitter));
Ok(pipeline::run(&config, source.as_ref(), ®istry)?)
}