hyperhive/hive-forge/src/verbs/pr.rs

33 lines
974 B
Rust

//! `pr <number> [repo]` — print key fields of a PR as JSON.
use anyhow::Result;
use clap::Args as ClapArgs;
use serde_json::json;
use crate::client::{Client, index};
use crate::verbs::print_json;
#[derive(ClapArgs)]
pub struct Args {
/// PR number.
number: u64,
}
pub fn run(client: &Client, args: Args) -> Result<()> {
let (owner, name) = client.owner_repo()?;
let pull = client
.api()
.repo_get_pull_request(owner, name, index(args.number)?)
.send()?;
let trimmed = json!({
"number": pull.number,
"title": pull.title,
"state": pull.state,
"merged": pull.merged,
"user": pull.user.as_ref().and_then(|u| u.login.as_deref()),
"head_sha": pull.head.as_ref().and_then(|h| h.sha.as_deref()),
"head_branch": pull.head.as_ref().and_then(|h| h.label.as_deref()),
"base_branch": pull.base.as_ref().and_then(|b| b.label.as_deref()),
});
print_json(&trimmed)
}