cli/show: add possibility to print path and link
This commit is contained in:
parent
66c950f6ab
commit
ced77f9aa2
1 changed files with 39 additions and 12 deletions
|
@ -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")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue