forte-cli 0.4.11

CLI for the Forte fullstack web framework
use anyhow::{Result, anyhow};
use std::path::PathBuf;

use super::project_config::read_project_id;

#[allow(clippy::too_many_arguments)]
pub async fn connect(
    project_dir: PathBuf,
    account_id: String,
    zone_id: String,
    api_token: Option<String>,
    zone_name: Option<String>,
    dataplane_access_key_id: Option<String>,
    dataplane_secret: Option<String>,
    purge_token: Option<String>,
) -> Result<()> {
    let id = read_project_id(&project_dir)?;
    match (
        api_token,
        zone_name,
        dataplane_access_key_id,
        dataplane_secret,
        purge_token,
    ) {
        (Some(api_token), ..) => {
            fn0_deploy::cloudflare_connect_managed(&id, &account_id, &zone_id, &api_token).await
        }
        (None, Some(zone_name), Some(key_id), Some(secret), Some(purge)) => {
            fn0_deploy::cloudflare_connect_manual(
                &id,
                &account_id,
                &zone_id,
                &zone_name,
                &key_id,
                &secret,
                &purge,
            )
            .await
        }
        _ => Err(anyhow!(
            "pass --api-token to let the CLI provision and mint, or run `forte cloudflare \
             provision` first and pass --zone-name --dataplane-access-key-id --dataplane-secret \
             --purge-token"
        )),
    }
}

pub async fn provision(
    project_dir: PathBuf,
    account_id: String,
    zone_id: String,
    api_token: String,
) -> Result<()> {
    let id = read_project_id(&project_dir)?;
    fn0_deploy::cloudflare_provision(&id, &account_id, &zone_id, &api_token).await
}

pub async fn status(project_dir: PathBuf) -> Result<()> {
    let id = read_project_id(&project_dir)?;
    fn0_deploy::cloudflare_status(&id).await
}