diff --git a/src/cli.rs b/src/cli.rs index ede5de4..ca58d29 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -12,6 +12,7 @@ pub struct Cli { pub enum FormatMode { Pretty, Json, + Compact, } impl std::fmt::Display for FormatMode { diff --git a/src/cmd/search.rs b/src/cmd/search.rs index 5781443..e2dd050 100644 --- a/src/cmd/search.rs +++ b/src/cmd/search.rs @@ -1,6 +1,6 @@ use crate::cli::FormatMode; use crate::jira_config::JiraConfig; -use crate::types::issue::{display_issues_json, display_issues_pretty}; +use crate::types::issue::{display_issues_compact, display_issues_json, display_issues_pretty}; pub async fn exec(output: FormatMode, jql: &str) -> Result<(), Box> { let config = JiraConfig::load().map_err(|e| format!("Configuration error: {}", e))?; @@ -26,6 +26,10 @@ pub async fn exec(output: FormatMode, jql: &str) -> Result<(), Box display_issues_json(&result.issues)?, (FormatMode::Json, true) => println!("[]"), + (FormatMode::Compact, false) => display_issues_compact(&result.issues)?, + (FormatMode::Compact, true) => { + println!("No results found for query."); + } } Ok(()) diff --git a/src/cmd/view.rs b/src/cmd/view.rs index 72cdeda..251c951 100644 --- a/src/cmd/view.rs +++ b/src/cmd/view.rs @@ -142,6 +142,7 @@ pub async fn exec(output: FormatMode, issue_key: &str) -> Result<(), Box pretty_print(&fetched_issue)?, FormatMode::Json => json_print(&fetched_issue)?, + FormatMode::Compact => todo!(), } Ok(()) diff --git a/src/types/issue.rs b/src/types/issue.rs index 455cb1b..59afac0 100644 --- a/src/types/issue.rs +++ b/src/types/issue.rs @@ -122,6 +122,27 @@ pub fn display_issues_pretty(issues: &[JiraIssue]) -> Result<(), Box Result<(), Box> { + println!("Found {} issues:", issues.len()); + println!("{:-<80}", ""); + + let mut tw = tabwriter::TabWriter::new(vec![]); + for issue in issues { + writeln!( + tw, + "{}:\t{}", + issue.key.clone().blue(), + issue.fields.summary.clone().green() + )?; + } + + tw.flush().unwrap(); + let written = String::from_utf8(tw.into_inner().unwrap()).unwrap(); + print!("{}", written); + + Ok(()) +} + pub fn display_issues_json(issues: &[JiraIssue]) -> Result<(), Box> { let j = serde_json::to_string_pretty(issues)?; println!("{}", j);