use anyhow::Result;
use futures::TryStreamExt;
use crate::config::Config;
use crate::make_tokio_runtime;
use crate::params::config::ConfigParams;
#[derive(Debug, clap::Parser)]
#[command(name = "ls", about = "List object", disable_version_flag = true)]
pub struct LsCmd {
#[command(flatten)]
pub config_params: ConfigParams,
#[arg()]
pub target: String,
#[arg(short, long)]
pub recursive: bool,
}
impl LsCmd {
pub fn run(self) -> Result<()> {
make_tokio_runtime(1).block_on(self.do_run())
}
async fn do_run(self) -> Result<()> {
let cfg = Config::load(&self.config_params.config)?;
let (op, path) = cfg.parse_location(&self.target)?;
if !self.recursive {
let mut ds = op.lister(&path).await?;
while let Some(de) = ds.try_next().await? {
println!("{}", de.name());
}
return Ok(());
}
let mut ds = op.lister_with(&path).recursive(true).await?;
while let Some(de) = ds.try_next().await? {
println!("{}", de.path());
}
Ok(())
}
}