codeberg_cli/actions/repo/
assignees.rs

1use forgejo_api::structs::User;
2
3use crate::actions::GeneralArgs;
4use crate::render::option::option_display;
5use crate::render::spinner::spin_until_ready;
6use crate::types::context::BergContext;
7use crate::types::git::OwnerRepo;
8
9use clap::Parser;
10
11/// List available assignee candidates
12#[derive(Parser, Debug)]
13pub struct RepoAssigneesArgs {}
14
15impl RepoAssigneesArgs {
16    pub async fn run(self, general_args: GeneralArgs) -> anyhow::Result<()> {
17        let _ = general_args;
18        let ctx = BergContext::new(self, general_args).await?;
19
20        let OwnerRepo { repo, owner } = ctx.owner_repo()?;
21        let repo_assignees =
22            spin_until_ready(ctx.client.repo_get_assignees(owner.as_str(), repo.as_str())).await?;
23
24        present_repo_assignees(&ctx, repo_assignees);
25
26        Ok(())
27    }
28}
29
30fn present_repo_assignees(ctx: &BergContext<RepoAssigneesArgs>, repo_assignees: Vec<User>) {
31    let mut table = ctx.make_table();
32
33    table
34        .set_header(vec![format!(
35            "Repository Assignees{}",
36            repo_assignees
37                .is_empty()
38                .then_some(" (empty)")
39                .unwrap_or_default()
40        )])
41        .add_rows(
42            repo_assignees
43                .into_iter()
44                .map(|assignee| vec![option_display(&assignee.login)]),
45        );
46
47    println!("{table}", table = table.show());
48}