codeberg_cli/actions/repo/
assignees.rs1use forgejo_api::structs::User;
2use miette::IntoDiagnostic;
3
4use crate::actions::GlobalArgs;
5use crate::render::json::JsonToStdout;
6use crate::render::option::option_display;
7use crate::render::spinner::spin_until_ready;
8use crate::types::context::BergContext;
9use crate::types::git::OwnerRepo;
10use crate::types::output::OutputMode;
11
12use clap::Parser;
13
14#[derive(Parser, Debug)]
16pub struct RepoAssigneesArgs {}
17
18impl RepoAssigneesArgs {
19 pub async fn run(self, global_args: GlobalArgs) -> miette::Result<()> {
20 let ctx = BergContext::new(self, global_args).await?;
21
22 let OwnerRepo { repo, owner } = ctx.owner_repo()?;
23 let (_, repo_assignees) = spin_until_ready(
24 ctx.client
25 .repo_get_assignees(owner.as_str(), repo.as_str())
26 .send(),
27 )
28 .await
29 .into_diagnostic()?;
30
31 match ctx.global_args.output_mode {
32 OutputMode::Pretty => {
33 present_repo_assignees(&ctx, repo_assignees);
34 }
35 OutputMode::Json => repo_assignees.print_json()?,
36 }
37
38 Ok(())
39 }
40}
41
42fn present_repo_assignees(ctx: &BergContext<RepoAssigneesArgs>, repo_assignees: Vec<User>) {
43 let table = ctx
44 .make_table()
45 .set_header(vec![format!(
46 "Repository Assignees{}",
47 if repo_assignees.is_empty() {
48 " (empty)"
49 } else {
50 Default::default()
51 }
52 )])
53 .add_rows(
54 repo_assignees
55 .into_iter()
56 .map(|assignee| vec![option_display(&assignee.login)]),
57 );
58
59 println!("{table}", table = table.show());
60}