codeberg_cli/actions/user/
info.rs

1use forgejo_api::structs::UserCurrentListReposQuery;
2use itertools::Itertools;
3
4use crate::actions::GeneralArgs;
5use crate::render::option::option_display;
6use crate::render::spinner::spin_until_ready;
7use crate::types::context::BergContext;
8
9use clap::Parser;
10
11/// Display short summary of the authenticated user account
12#[derive(Parser, Debug)]
13pub struct UserInfoArgs {}
14
15impl UserInfoArgs {
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        present_user_info(&ctx).await?;
21        Ok(())
22    }
23}
24
25async fn present_user_info(ctx: &BergContext<UserInfoArgs>) -> anyhow::Result<()> {
26    let user = spin_until_ready(ctx.client.user_get_current()).await?;
27    let repos = ctx
28        .client
29        .user_current_list_repos(UserCurrentListReposQuery::default())
30        .await?;
31    let top_repos = repos
32        .iter()
33        .sorted_by_key(|repo| repo.stars_count.unwrap_or_default())
34        .rev()
35        .take(5)
36        .collect::<Vec<_>>();
37
38    let mut table = ctx.make_table();
39
40    table
41        .set_header(vec!["User Information"])
42        .add_row(vec![String::from("Username"), option_display(&user.login)])
43        .add_row(vec![
44            String::from("Followers"),
45            option_display(&user.followers_count),
46        ])
47        .add_row(vec![
48            String::from("Following"),
49            option_display(&user.following_count),
50        ])
51        .add_row(vec![String::from("Repos"), repos.len().to_string()])
52        .add_row(vec![
53            String::from("Top Repos"),
54            top_repos
55                .into_iter()
56                .map(|repo| {
57                    format!(
58                        "{}({}★)",
59                        option_display(&repo.name),
60                        option_display(&repo.stars_count)
61                    )
62                })
63                .join(", "),
64        ]);
65
66    println!("{table}", table = table.show());
67
68    Ok(())
69}