lune/src/cli/list.rs
2024-01-14 10:35:27 +01:00

47 lines
1.5 KiB
Rust

use std::{fmt::Write as _, process::ExitCode};
use anyhow::Result;
use clap::Parser;
use super::utils::listing::{find_lune_scripts, sort_lune_scripts, write_lune_scripts_list};
/// List scripts available to run
#[derive(Debug, Clone, Parser)]
pub struct ListCommand {}
impl ListCommand {
pub async fn run(self) -> Result<ExitCode> {
let sorted_relative = find_lune_scripts(false).await.map(sort_lune_scripts);
let sorted_home_dir = find_lune_scripts(true).await.map(sort_lune_scripts);
if sorted_relative.is_err() && sorted_home_dir.is_err() {
eprintln!("{}", sorted_relative.unwrap_err());
return Ok(ExitCode::FAILURE);
}
let sorted_relative = sorted_relative.unwrap_or(Vec::new());
let sorted_home_dir = sorted_home_dir.unwrap_or(Vec::new());
let mut buffer = String::new();
if !sorted_relative.is_empty() {
if sorted_home_dir.is_empty() {
write!(&mut buffer, "Available scripts:")?;
} else {
write!(&mut buffer, "Available scripts in current directory:")?;
}
write_lune_scripts_list(&mut buffer, sorted_relative)?;
}
if !sorted_home_dir.is_empty() {
write!(&mut buffer, "Available global scripts:")?;
write_lune_scripts_list(&mut buffer, sorted_home_dir)?;
}
if buffer.is_empty() {
println!("No scripts found.");
} else {
print!("{buffer}");
}
Ok(ExitCode::SUCCESS)
}
}