pub mod ls;
pub mod pull;
pub mod push;
pub mod remote;
pub mod state;
pub mod sync_cmd;
pub mod sync_engine;
use crate::output::OutputFormat;
use anyhow::Result;
use clap::Subcommand;
#[derive(Subcommand)]
pub enum FilesCommand {
Sync {
#[arg(long, short)]
session: String,
#[arg(default_value = ".")]
local_dir: String,
#[arg(long, default_value = "3")]
interval: u64,
#[arg(long, default_value = "last-write-wins", value_parser = ["last-write-wins", "local-wins", "remote-wins"])]
conflict: String,
#[arg(long)]
exclude: Vec<String>,
#[arg(long)]
no_gitignore: bool,
#[arg(long)]
dry_run: bool,
#[arg(long)]
delete: bool,
#[arg(long, short)]
verbose: bool,
},
Push {
#[arg(long, short)]
session: String,
#[arg(default_value = ".")]
local_dir: String,
#[arg(long)]
delete: bool,
#[arg(long)]
dry_run: bool,
},
Pull {
#[arg(long, short)]
session: String,
#[arg(default_value = ".")]
local_dir: String,
#[arg(long)]
delete: bool,
#[arg(long)]
dry_run: bool,
},
Ls {
#[arg(long, short)]
session: String,
#[arg(default_value = "/")]
path: String,
#[arg(long, short)]
recursive: bool,
#[arg(long, short)]
long: bool,
},
}
pub async fn run(
command: FilesCommand,
api_url: &str,
api_key: &str,
org_id: Option<&str>,
output: OutputFormat,
quiet: bool,
) -> Result<()> {
match command {
FilesCommand::Sync {
session,
local_dir,
interval,
conflict,
exclude,
no_gitignore,
dry_run,
delete,
verbose,
} => {
sync_cmd::run(
api_url,
api_key,
org_id,
quiet,
session,
local_dir,
interval,
conflict,
exclude,
no_gitignore,
dry_run,
delete,
verbose,
)
.await
}
FilesCommand::Push {
session,
local_dir,
delete,
dry_run,
} => {
push::run(
api_url, api_key, org_id, output, quiet, session, local_dir, delete, dry_run,
)
.await
}
FilesCommand::Pull {
session,
local_dir,
delete,
dry_run,
} => {
pull::run(
api_url, api_key, org_id, output, quiet, session, local_dir, delete, dry_run,
)
.await
}
FilesCommand::Ls {
session,
path,
recursive,
long,
} => {
ls::run(
api_url, api_key, org_id, output, session, path, recursive, long,
)
.await
}
}
}