rgen_cli_lib/cmds/
categories.rs1use clap::Args;
2use colored::*;
3use rgen_core::RegistryClient;
4use rgen_utils::error::Result;
5
6#[derive(Args, Debug)]
7pub struct CategoriesArgs {
8 #[arg(long)]
10 pub keywords: bool,
11
12 #[arg(short, long)]
14 pub detailed: bool,
15
16 #[arg(long)]
18 pub json: bool,
19}
20
21pub async fn run(args: &CategoriesArgs) -> Result<()> {
22 let registry_client = RegistryClient::new()?;
23
24 if args.keywords {
25 let keywords = registry_client.get_popular_keywords().await?;
26 display_keywords(&keywords, args.detailed, args.json)?;
27 } else {
28 let categories = registry_client.get_popular_categories().await?;
29 display_categories(&categories, args.detailed, args.json)?;
30 }
31
32 Ok(())
33}
34
35fn display_categories(categories: &[(String, u64)], detailed: bool, json: bool) -> Result<()> {
36 if json {
37 let json_output = serde_json::to_string_pretty(categories)?;
38 println!("{}", json_output);
39 return Ok(());
40 }
41
42 println!("📂 Popular Categories");
43 println!("===================");
44
45 if detailed {
46 for (i, (category, count)) in categories.iter().enumerate() {
47 println!(
48 "{}. {} ({})",
49 i + 1,
50 category.bold().cyan(),
51 format!("{} templates", count).dimmed()
52 );
53 }
54 } else {
55 let categories_str = categories
56 .iter()
57 .take(10)
58 .map(|(cat, _)| cat.as_str())
59 .collect::<Vec<_>>()
60 .join(", ");
61 println!("{}", categories_str.cyan());
62 }
63
64 Ok(())
65}
66
67fn display_keywords(keywords: &[(String, u64)], detailed: bool, json: bool) -> Result<()> {
68 if json {
69 let json_output = serde_json::to_string_pretty(keywords)?;
70 println!("{}", json_output);
71 return Ok(());
72 }
73
74 println!("🏷️ Popular Keywords");
75 println!("===================");
76
77 if detailed {
78 for (i, (keyword, count)) in keywords.iter().enumerate() {
79 println!(
80 "{}. {} ({})",
81 i + 1,
82 keyword.bold().green(),
83 format!("{} templates", count).dimmed()
84 );
85 }
86 } else {
87 let keywords_str = keywords
88 .iter()
89 .take(15)
90 .map(|(kw, _)| kw.as_str())
91 .collect::<Vec<_>>()
92 .join(", ");
93 println!("{}", keywords_str.green());
94 }
95
96 Ok(())
97}