From 07864325d795cb8bc20b5c3fca128d223fe3592a Mon Sep 17 00:00:00 2001 From: Daan Boerlage Date: Wed, 22 Jan 2025 01:51:00 +0100 Subject: [PATCH] Add an issue get command to the client and use it for the view command --- crates/jirac/src/cmd/view.rs | 19 ++--------- crates/libjirac/src/client/commands.rs | 2 ++ .../src/client/commands/issue_get_command.rs | 33 +++++++++++++++++++ 3 files changed, 38 insertions(+), 16 deletions(-) create mode 100644 crates/libjirac/src/client/commands/issue_get_command.rs diff --git a/crates/jirac/src/cmd/view.rs b/crates/jirac/src/cmd/view.rs index d8d1213..ff6d0f2 100644 --- a/crates/jirac/src/cmd/view.rs +++ b/crates/jirac/src/cmd/view.rs @@ -2,7 +2,7 @@ use crate::cli::FormatMode; use crate::jira_config::JiraConfig; use crate::term::hyperlink; use crossterm::style::{Color, Stylize}; -use libjirac::client::commands::{SearchCommand, SelfCommand}; +use libjirac::client::commands::IssueGetCommand; use libjirac::client::JiraClient; use libjirac::entities::issue::JiraIssue; use std::io::Write; @@ -102,23 +102,10 @@ pub async fn exec(output: FormatMode, issue_key: &str) -> Result<(), Box x, - None => { - eprintln!("No issue found with that key"); - std::process::exit(1); - } - }; - - let self_cmd = SelfCommand::::new(&matched_issue.href); - let fetched_issue = client.exec(self_cmd).await?; + let get_cmd = IssueGetCommand::new(issue_key); + let fetched_issue = client.exec(get_cmd).await?; match output { FormatMode::Pretty => pretty_print(&fetched_issue)?, diff --git a/crates/libjirac/src/client/commands.rs b/crates/libjirac/src/client/commands.rs index 6f5d4f0..60dbdcd 100644 --- a/crates/libjirac/src/client/commands.rs +++ b/crates/libjirac/src/client/commands.rs @@ -1,10 +1,12 @@ mod issue_create_command; +mod issue_get_command; mod issue_transitions_command; mod issue_transitions_update_command; mod search_command; mod self_command; pub use issue_create_command::IssueCreateCommand; +pub use issue_get_command::IssueGetCommand; pub use issue_transitions_command::IssueTransitionsCommand; pub use issue_transitions_update_command::IssueTransitionsUpdateCommand; pub use search_command::SearchCommand; diff --git a/crates/libjirac/src/client/commands/issue_get_command.rs b/crates/libjirac/src/client/commands/issue_get_command.rs new file mode 100644 index 0000000..e52a5f7 --- /dev/null +++ b/crates/libjirac/src/client/commands/issue_get_command.rs @@ -0,0 +1,33 @@ +use crate::client::{JiraCommand, JiraRequestType}; +use crate::entities::issue::JiraIssue; + +#[derive(Debug)] +pub struct IssueGetCommand { + pub key: String, +} + +impl IssueGetCommand { + pub fn new(key: &str) -> Self { + Self { + key: key.to_string(), + } + } +} + +impl JiraCommand for IssueGetCommand { + type TResponse = JiraIssue; + type TPayload = (); + const REQUEST_TYPE: JiraRequestType = JiraRequestType::Read; + + fn endpoint(&self) -> String { + format!("/rest/api/2/issue/{}", self.key) + } + + fn request_body(&self) -> Option<&Self::TPayload> { + None + } + + fn query_params(&self) -> Option> { + None + } +}