leetcode_cli/cmd/
exec.rs

1//! Exec command
2use crate::{Error, Result};
3use clap::Args;
4
5/// Exec command arguments
6#[derive(Args)]
7#[command(group = clap::ArgGroup::new("question-id").args(&["id", "daily"]).required(true))]
8pub struct ExecArgs {
9    /// Question id
10    #[arg(value_parser = clap::value_parser!(i32))]
11    pub id: Option<i32>,
12
13    /// Submit today's daily challenge
14    #[arg(short = 'd', long)]
15    pub daily: bool,
16}
17
18impl ExecArgs {
19    /// `exec` handler
20    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}