1use crate::{Format, Runnable};
2use anyhow::Result;
3use clap::Parser;
4use std::{fs::File, path::PathBuf};
5
6mod cancel;
7pub mod filters;
8mod pause;
9mod resume;
10mod start;
11mod status;
12
13use cancel::BalanceCancelCommand;
14use pause::BalancePauseCommand;
15use resume::BalanceResumeCommand;
16use start::BalanceStartCommand;
17use status::BalanceStatusCommand;
18
19#[derive(Parser, Debug)]
26pub struct BalanceCommand {
27 #[clap(subcommand)]
28 pub subcommand: BalanceSubcommand,
29}
30
31impl Runnable for BalanceCommand {
32 fn run(&self, format: Format, dry_run: bool) -> Result<()> {
33 match &self.subcommand {
34 BalanceSubcommand::Start(cmd) => cmd.run(format, dry_run),
35 BalanceSubcommand::Pause(cmd) => cmd.run(format, dry_run),
36 BalanceSubcommand::Cancel(cmd) => cmd.run(format, dry_run),
37 BalanceSubcommand::Resume(cmd) => cmd.run(format, dry_run),
38 BalanceSubcommand::Status(cmd) => cmd.run(format, dry_run),
39 }
40 }
41}
42
43#[derive(Parser, Debug)]
44pub enum BalanceSubcommand {
45 Start(BalanceStartCommand),
46 Pause(BalancePauseCommand),
47 Cancel(BalanceCancelCommand),
48 Resume(BalanceResumeCommand),
49 Status(BalanceStatusCommand),
50}
51
52fn open_path(path: &PathBuf) -> Result<File> {
54 use anyhow::Context;
55 File::open(path).with_context(|| format!("failed to open '{}'", path.display()))
56}