eureka_manager_cli/
commands.rs1pub 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 #[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}