mirror of
https://github.com/lune-org/lune.git
synced 2025-04-04 10:30:54 +01:00
47 lines
1.5 KiB
Rust
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)
|
|
}
|
|
}
|