eureka_manager_cli/
commands.rs

1pub mod count;
2pub mod delete;
3pub mod download;
4pub mod transfer;
5
6use std::future::Future;
7
8use actix::Addr;
9use clap::Subcommand;
10use download::DownloadSubCommands;
11use eureka_mmanager::DownloadManager;
12use indicatif::MultiProgress;
13
14#[derive(Debug, Subcommand)]
15pub enum Commands {
16    /// Download subcommands
17    #[command(subcommand)]
18    Download(DownloadSubCommands),
19    Count(Box<count::CountArgs>),
20    #[command(subcommand)]
21    Remove(delete::DeleteSubcommands),
22    Transfert(Box<transfer::TransferCommand>),
23}
24
25#[derive(Debug, Clone)]
26pub struct AsyncRunContext {
27    pub manager: Addr<DownloadManager>,
28    pub progress: MultiProgress,
29}
30
31pub trait AsyncRun: Sync {
32    fn run(&self, ctx: AsyncRunContext) -> impl Future<Output = anyhow::Result<()>> + Send;
33}
34
35impl AsyncRun for Commands {
36    async fn run(&self, manager: AsyncRunContext) -> anyhow::Result<()> {
37        match self {
38            Commands::Download(download_sub_commands) => download_sub_commands.run(manager).await,
39            Commands::Count(count_args) => count_args.run(manager).await,
40            Commands::Remove(delete_subcommands) => delete_subcommands.run(manager).await,
41            Commands::Transfert(transfer_command) => transfer_command.run(manager).await,
42        }
43    }
44}