1use anyhow::Result;
4use clap::Args as ClapArgs;
5
6#[derive(ClapArgs, Debug)]
8pub struct Args {
9 #[command(subcommand)]
11 pub command: WikiCommands,
12}
13
14#[derive(clap::Subcommand, Debug)]
16pub enum WikiCommands {
17 Push(PushArgs),
19
20 Pull(PullArgs),
22
23 Status(StatusArgs),
25
26 Config(ConfigArgs),
28}
29
30#[derive(ClapArgs, Debug)]
32pub struct PushArgs {
33 #[arg(long, short)]
35 pub provider: Option<String>,
36
37 #[arg(long, short)]
39 pub repo: Option<String>,
40
41 #[arg(long)]
43 pub adr: Option<String>,
44
45 #[arg(long, short)]
47 pub force: bool,
48}
49
50#[derive(ClapArgs, Debug)]
52pub struct PullArgs {
53 #[arg(long, short)]
55 pub provider: Option<String>,
56
57 #[arg(long, short)]
59 pub repo: Option<String>,
60
61 #[arg(long)]
63 pub adr: Option<String>,
64}
65
66#[derive(ClapArgs, Debug)]
68pub struct StatusArgs {
69 #[arg(long, short)]
71 pub verbose: bool,
72}
73
74#[derive(ClapArgs, Debug)]
76pub struct ConfigArgs {
77 #[arg(long, short)]
79 pub provider: Option<String>,
80
81 #[arg(long, short)]
83 pub repo: Option<String>,
84
85 #[arg(long, short)]
87 pub token: Option<String>,
88
89 #[arg(long)]
91 pub show: bool,
92}
93
94pub fn run(args: Args) -> Result<()> {
96 match args.command {
97 WikiCommands::Push(push_args) => run_push(push_args),
98 WikiCommands::Pull(pull_args) => run_pull(pull_args),
99 WikiCommands::Status(status_args) => run_status(status_args),
100 WikiCommands::Config(config_args) => run_config(config_args),
101 }
102}
103
104fn run_push(args: PushArgs) -> Result<()> {
105 println!("Pushing ADRs to wiki");
106 if let Some(provider) = &args.provider {
107 println!("Provider: {}", provider);
108 }
109 if let Some(repo) = &args.repo {
110 println!("Repository: {}", repo);
111 }
112 if let Some(adr) = &args.adr {
113 println!("ADR: {}", adr);
114 }
115 if args.force {
116 println!("Force mode enabled");
117 }
118
119 println!("\n[Wiki push not yet implemented in Rust version]");
124 Ok(())
125}
126
127fn run_pull(args: PullArgs) -> Result<()> {
128 println!("Pulling ADRs from wiki");
129 if let Some(provider) = &args.provider {
130 println!("Provider: {}", provider);
131 }
132 if let Some(repo) = &args.repo {
133 println!("Repository: {}", repo);
134 }
135 if let Some(adr) = &args.adr {
136 println!("ADR: {}", adr);
137 }
138
139 println!("\n[Wiki pull not yet implemented in Rust version]");
144 Ok(())
145}
146
147fn run_status(_args: StatusArgs) -> Result<()> {
148 println!("Wiki synchronization status");
149
150 println!("\n[Wiki status not yet implemented in Rust version]");
155 Ok(())
156}
157
158fn run_config(args: ConfigArgs) -> Result<()> {
159 if args.show {
160 println!("Current wiki configuration:");
161 println!("\n[Wiki config display not yet implemented in Rust version]");
163 return Ok(());
164 }
165
166 if args.provider.is_some() || args.repo.is_some() || args.token.is_some() {
167 println!("Configuring wiki settings");
168 if let Some(provider) = &args.provider {
169 println!("Setting provider: {}", provider);
170 }
171 if let Some(repo) = &args.repo {
172 println!("Setting repository: {}", repo);
173 }
174 if args.token.is_some() {
175 println!("Setting token: [hidden]");
176 }
177
178 println!("\n[Wiki config update not yet implemented in Rust version]");
184 } else {
185 println!("No configuration changes specified. Use --show to view current config.");
186 }
187
188 Ok(())
189}