claps 0.2.0

CLIs written in Rust
Documentation
use anyhow::Result;
use clap::{Args, Subcommand};

use claps::common::cmd::Run;
use claps::external::bitwarden::types::Item;

mod list;
mod update;

#[derive(Debug, Args)]
pub(super) struct Cmd {
    #[command(subcommand)]
    sub_cmd: SubCmd,
}

#[derive(Debug, Subcommand)]
enum SubCmd {
    List(list::Cmd),
    Update(update::Cmd),
}

#[async_trait::async_trait]
impl Run for Cmd {
    async fn run(self) -> Result<()> {
        match self.sub_cmd {
            SubCmd::List(cmd) => cmd.run().await,
            SubCmd::Update(cmd) => cmd.run().await,
        }
    }
}

#[derive(Debug, Args)]
struct CommonArgs {
    #[arg(long, default_value = "the Great Wall")]
    folder: String,
}

impl CommonArgs {
    fn items(&self) -> Result<Vec<Item>> {
        let folder = claps::external::bitwarden::get::folder(&self.folder)?;
        claps::external::bitwarden::list::items(None, Some(folder.id.as_str()))
    }
}