// #![allow(clippy::module_name_repetitions)] mod alerts; mod file_watcher; mod forge; mod init; mod repo; mod server; #[cfg(feature = "tui")] mod tui; #[cfg(test)] mod tests; mod webhook; use git_next_core::git; use std::path::PathBuf; use clap::Parser; use color_eyre::Result; use kxio::{fs, network::Network}; #[derive(Parser, Debug)] #[clap(version = clap::crate_version!(), author = clap::crate_authors!(), about = clap::crate_description!())] struct Commands { #[clap(subcommand)] command: Command, } #[derive(Parser, Debug)] enum Command { Init, #[clap(subcommand)] Server(Server), } #[derive(Parser, Debug)] enum Server { Init, Start { /// Display a UI (experimental) #[cfg(feature = "tui")] #[arg(long, required = false)] ui: bool, }, } fn main() -> Result<()> { let fs = fs::new(PathBuf::default()); let net = Network::new_real(); let repository_factory = git::repository::factory::real(); let commands = Commands::parse(); match commands.command { Command::Init => { init::run(&fs)?; } Command::Server(server) => match server { Server::Init => { server::init(&fs)?; } #[cfg(not(feature = "tui"))] Server::Start {} => { let sleep_duration = std::time::Duration::from_secs(10); server::start(false, fs, net, repository_factory, sleep_duration)?; } #[cfg(feature = "tui")] Server::Start { ui } => { let sleep_duration = std::time::Duration::from_secs(10); server::start(ui, fs, net, repository_factory, sleep_duration)?; } }, } Ok(()) }