1use crate::{Error, Result};
3use clap::Args;
4
5#[derive(Args)]
7#[command(group = clap::ArgGroup::new("question-id").args(&["id", "daily"]).required(true))]
8pub struct ExecArgs {
9 #[arg(value_parser = clap::value_parser!(i32))]
11 pub id: Option<i32>,
12
13 #[arg(short = 'd', long)]
15 pub daily: bool,
16}
17
18impl ExecArgs {
19 pub async fn run(&self) -> Result<()> {
21 use crate::cache::{Cache, Run};
22
23 let cache = Cache::new()?;
24
25 let daily_id = if self.daily {
26 Some(cache.get_daily_problem_id().await?)
27 } else {
28 None
29 };
30
31 let id = self.id.or(daily_id).ok_or(Error::NoneError)?;
32
33 let res = cache.exec_problem(id, Run::Submit, None).await?;
34
35 println!("{}", res);
36 Ok(())
37 }
38}