//! `issue [repo]` — print key fields of an issue as JSON. use anyhow::Result; use clap::Args as ClapArgs; use serde_json::json; use crate::client::{Client, index}; use crate::verbs::{dependency_summaries, print_json}; #[derive(ClapArgs)] pub struct Args { /// Issue number. number: u64, } pub fn run(client: &Client, args: Args) -> Result<()> { let (owner, name) = client.owner_repo()?; let issue = client .api() .issue_get_issue(owner, name, index(args.number)?) .send()?; let assignees: Vec<&str> = issue .assignees .as_deref() .unwrap_or_default() .iter() .filter_map(|u| u.login.as_deref()) .collect(); let labels: Vec<&str> = issue .labels .as_deref() .unwrap_or_default() .iter() .filter_map(|l| l.name.as_deref()) .collect(); let dependencies = dependency_summaries(client, owner, name, args.number)?; let trimmed = json!({ "number": issue.number, "title": issue.title, "state": issue.state, "user": issue.user.as_ref().and_then(|u| u.login.as_deref()), "assignees": assignees, "labels": labels, "dependencies": dependencies, "body": issue.body, }); print_json(&trimmed) }