use std::process::ExitCode;
use clap::Parser;
mod build;
mod cli;
mod commands;
mod config;
mod manifest;
mod scan;
mod serve;
mod session;
mod write;
fn main() -> ExitCode {
let args = cli::Cli::parse();
if let Some(dir) = &args.root
&& let Err(e) = std::env::set_current_dir(dir)
{
return fail(&format!("could not use {}: {e}", dir.display()));
}
let result = match &args.command {
cli::Command::Build { site, out, force } => commands::build(site, out, *force),
cli::Command::Watch { site, out, force } => commands::watch(site, out, *force),
cli::Command::Serve {
site,
host,
port,
open,
} => serve::serve(site, host, *port, *open),
cli::Command::Clean { out, force } => commands::clean(out, *force),
};
match result {
Ok(()) => ExitCode::SUCCESS,
Err(e) => fail(&e),
}
}
fn fail(message: &str) -> ExitCode {
eprintln!("✗ {message}");
ExitCode::FAILURE
}