1use anyhow::Result;
4use clap::Args as ClapArgs;
5
6#[derive(ClapArgs, Debug)]
8pub struct Args {
9 #[command(subcommand)]
11 pub command: AiCommands,
12}
13
14#[derive(clap::Subcommand, Debug)]
16pub enum AiCommands {
17 Draft(DraftArgs),
19
20 Suggest(SuggestArgs),
22
23 Summarize(SummarizeArgs),
25}
26
27#[derive(ClapArgs, Debug)]
29pub struct DraftArgs {
30 pub topic: String,
32
33 #[arg(long, short, default_value = "anthropic")]
35 pub provider: String,
36
37 #[arg(long, short)]
39 pub model: Option<String>,
40
41 #[arg(long, default_value = "nygard")]
43 pub format: String,
44}
45
46#[derive(ClapArgs, Debug)]
48pub struct SuggestArgs {
49 pub id: String,
51
52 #[arg(long, short, default_value = "anthropic")]
54 pub provider: String,
55
56 #[arg(long, short)]
58 pub model: Option<String>,
59}
60
61#[derive(ClapArgs, Debug)]
63pub struct SummarizeArgs {
64 pub id: String,
66
67 #[arg(long, short, default_value = "anthropic")]
69 pub provider: String,
70
71 #[arg(long, short)]
73 pub model: Option<String>,
74}
75
76pub fn run(args: Args) -> Result<()> {
78 match args.command {
79 AiCommands::Draft(draft_args) => run_draft(draft_args),
80 AiCommands::Suggest(suggest_args) => run_suggest(suggest_args),
81 AiCommands::Summarize(summarize_args) => run_summarize(summarize_args),
82 }
83}
84
85fn run_draft(args: DraftArgs) -> Result<()> {
86 println!("Generating ADR draft for topic: {}", args.topic);
87 println!("Using provider: {}, format: {}", args.provider, args.format);
88
89 println!("\n[AI draft generation not yet implemented in Rust version]");
94 Ok(())
95}
96
97fn run_suggest(args: SuggestArgs) -> Result<()> {
98 println!("Getting suggestions for ADR: {}", args.id);
99 println!("Using provider: {}", args.provider);
100
101 println!("\n[AI suggestions not yet implemented in Rust version]");
106 Ok(())
107}
108
109fn run_summarize(args: SummarizeArgs) -> Result<()> {
110 println!("Summarizing ADR: {}", args.id);
111 println!("Using provider: {}", args.provider);
112
113 println!("\n[AI summarization not yet implemented in Rust version]");
118 Ok(())
119}