cli/show: add possibility to print path and link

This commit is contained in:
Dmitriy Pleshevskiy 2022-08-18 11:54:23 +03:00
parent 66c950f6ab
commit ced77f9aa2
Signed by: pleshevskiy
GPG key ID: 1B59187B161C0215

View file

@ -19,8 +19,25 @@ use crate::repo::Repository;
#[derive(clap::Args)]
pub struct Args {
#[clap(long)]
print_path: bool,
part: Option<PrintPart>,
}
#[derive(clap::ValueEnum, Clone)]
enum PrintPart {
Path,
Link,
}
impl std::str::FromStr for PrintPart {
type Err = &'static str;
fn from_str(s: &str) -> Result<Self, Self::Err> {
match s {
"path" => Ok(PrintPart::Path),
"link" => Ok(PrintPart::Link),
_ => Err(r#"You can display only "path" or "link""#),
}
}
}
pub fn execute(repo: impl Repository, args: Args) {
@ -34,15 +51,25 @@ pub fn execute(repo: impl Repository, args: Args) {
}
};
if args.print_path {
match args.part {
None => {
println!("Information about your current task:");
print_task_detail(&task);
}
Some(PrintPart::Path) => {
println!(
"{}",
task.path
.unwrap_or_else(|| std::env::current_dir().expect("Cannot get current dir"))
.to_string_lossy()
)
}
Some(PrintPart::Link) => {
if let Some(link) = task.link {
println!("{}", link)
} else {
println!("Information about your current task:");
print_task_detail(&task);
eprintln!("The current task doesn't contain link")
}
}
}
}