use clap::{Args, Parser, Subcommand};
use std::path::PathBuf;
#[path = "../bundle/backend.rs"]
pub mod backend;
mod daemon;
mod server;
#[derive(Parser)]
#[command(name = "lgtm", version, about)]
struct Cli {
#[arg(long, global = true, env = "LGTM_STATE_DIR")]
state_dir: Option<PathBuf>,
#[command(subcommand)]
command: Command,
}
#[derive(Subcommand)]
enum Command {
Up(Up),
Down,
Status,
#[command(hide = true)]
Serve {
#[arg(long, default_value_t = 8080)]
port: u16,
},
}
#[derive(Args)]
struct Up {
#[arg(long, default_value_t = 8080)]
port: u16,
#[arg(long)]
foreground: bool,
#[arg(long)]
no_open: bool,
}
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let cli = Cli::parse();
let state_dir = daemon::state_dir(cli.state_dir)?;
match cli.command {
Command::Up(options) if options.foreground => server::serve(options.port, &state_dir).await,
Command::Up(options) => daemon::up(options.port, !options.no_open, &state_dir).await,
Command::Down => daemon::down(&state_dir).await,
Command::Status => daemon::status(&state_dir).await,
Command::Serve { port } => server::serve(port, &state_dir).await,
}
}