//! `comment [body sources] [repo]` — post a comment on an //! issue or PR. use anyhow::Result; use clap::Args as ClapArgs; use serde_json::json; use crate::body; use crate::client::Client; use crate::verbs::print_json; #[derive(ClapArgs)] pub struct Args { /// Issue or PR number. number: u64, /// Inline body text. #[arg(long, conflicts_with = "body_file")] body: Option, /// Read body from a file. `-` means stdin. #[arg(long = "body-file")] body_file: Option, /// Repo override. repo: Option, } pub fn run(client: &Client, args: Args) -> Result<()> { let body = body::resolve_required(args.body.as_deref(), args.body_file.as_deref(), "comment")?; let repo = client.repo(args.repo.as_deref()); let resp = client.post_json( &format!("/repos/{repo}/issues/{}/comments", args.number), &json!({ "body": body }), )?; print_json(&json!({ "id": resp.get("id"), "url": resp.get("html_url"), })) }