asterai 1.0.0-alpha.1

CLI for asterai - the portable AI compute platform
use crate::command::auth::AuthArgs;
use crate::command::component::ComponentArgs;
use crate::command::env::EnvArgs;
use crate::command::help::Help;

mod auth;
mod component;
mod env;
mod help;
mod resource_or_id;

pub enum Command {
    Auth(AuthArgs),
    Env(EnvArgs),
    Component(ComponentArgs),
    Help,
}

impl Command {
    pub fn parse(mut args: impl Iterator<Item = String>) -> eyre::Result<Self> {
        let Some(first_token) = args.next() else {
            return Ok(Self::Help);
        };
        match first_token.as_str() {
            "auth" => AuthArgs::parse(args).map(Self::Auth),
            "env" => EnvArgs::parse(args).map(Self::Env),
            "component" => ComponentArgs::parse(args).map(Self::Component),
            _ => Ok(Self::Help),
        }
    }

    pub async fn run(self) -> eyre::Result<()> {
        match self {
            Command::Auth(args) => args.execute().await,
            Command::Env(args) => args.execute().await,
            Command::Component(args) => args.execute().await,
            _ => Help::execute(),
        }
    }
}