Show subcommand #24

Merged
pleshevskiy merged 2 commits from show into main 2022-08-18 11:58:02 +03:00
Showing only changes of commit ced77f9aa2 - Show all commits

View file

@ -19,8 +19,25 @@ use crate::repo::Repository;
#[derive(clap::Args)] #[derive(clap::Args)]
pub struct Args { pub struct Args {
#[clap(long)] part: Option<PrintPart>,
print_path: bool, }
#[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) { 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!( println!(
"{}", "{}",
task.path task.path
.unwrap_or_else(|| std::env::current_dir().expect("Cannot get current dir")) .unwrap_or_else(|| std::env::current_dir().expect("Cannot get current dir"))
.to_string_lossy() .to_string_lossy()
) )
}
Some(PrintPart::Link) => {
if let Some(link) = task.link {
println!("{}", link)
} else { } else {
println!("Information about your current task:"); eprintln!("The current task doesn't contain link")
print_task_detail(&task); }
}
} }
} }