use crate::cli::command::get_sync_dir::GetSyncDirArgs;
use crate::cli::command::list_paths::ListPathsArgs;
use crate::cli::command::query::QueryArgs;
use crate::cli::command::set_sync_dir::SetSyncDirArgs;
use crate::cli::command::sync::SyncArgs;
use arbitrary::Arbitrary;
use facet::Facet;
#[derive(Facet, Arbitrary, PartialEq, Debug)]
#[repr(u8)]
pub enum Command {
Sync(SyncArgs),
ListPaths(ListPathsArgs),
GetSyncDir(GetSyncDirArgs),
SetSyncDir(SetSyncDirArgs),
Query(QueryArgs),
}
impl Default for Command {
fn default() -> Self {
Command::GetSyncDir(GetSyncDirArgs)
}
}
impl Command {
pub fn invoke(self) -> eyre::Result<()> {
match self {
Command::Sync(args) => args.invoke(),
Command::ListPaths(args) => args.invoke(),
Command::GetSyncDir(args) => args.invoke(),
Command::SetSyncDir(args) => args.invoke(),
Command::Query(args) => args.invoke_and_print(),
}
}
}