use crate::{
config::GitMoverConfig, errors::GitMoverError, platform::PlatformType, utils::main_sync,
};
use clap::Parser;
use serde::Deserialize;
use std::path::PathBuf;
#[allow(clippy::struct_excessive_bools)]
#[derive(Parser, Deserialize, Default, Clone, Debug)]
pub struct GitMoverCli {
#[arg(long, visible_alias = "from")]
pub source: Option<PlatformType>,
#[arg(long, alias = "dest", visible_alias = "to")]
pub destination: Option<PlatformType>,
#[arg(long = "no-forks")]
pub no_forks: bool,
#[arg(long = "no-delete")]
pub no_delete: bool,
#[arg(long)]
pub resync: bool,
#[arg(long)]
pub config: Option<PathBuf>,
#[arg(long)]
pub show_config_path: bool,
#[arg(long)]
pub manual: bool,
#[arg(short, long, visible_short_alias = 'd', action = clap::ArgAction::Count)]
pub verbose: u8,
}
impl GitMoverCli {
pub async fn main(self) -> Result<(), GitMoverError> {
let config = GitMoverConfig::try_new(self)?;
if config.cli_args.show_config_path {
println!("{}", config.config_path.display());
return Ok(());
}
main_sync(config).await
}
}
pub async fn git_mover_main() -> Result<(), GitMoverError> {
let git_mover_inst = GitMoverCli::parse();
git_mover_inst.main().await
}