use anyhow::{Context, Result};
use bonsai_sdk::{blocking::Client, API_KEY_ENVVAR, API_URL_ENVVAR};
use clap::Args;
use risc0_zkvm::VERSION;
#[derive(Debug, Clone, Default, Args, PartialEq, Eq)]
#[group(multiple = false)]
pub struct ClientEnvs {
#[arg(long)]
pub api_url: Option<String>,
#[arg(long)]
pub api_key: Option<String>,
}
pub(crate) fn get_client(client_envs: &ClientEnvs) -> Result<Client> {
let (api_url, api_key) = get_client_envs(client_envs)?;
Client::from_parts(api_url, api_key, VERSION).context("Failed to create Bonsai client")
}
pub(crate) fn get_client_envs(client_envs: &ClientEnvs) -> Result<(String, String)> {
let api_url = if let Some(ref api_url) = client_envs.api_url {
api_url.to_string()
} else {
std::env::var(API_URL_ENVVAR).context(format!(
"Either `--api-url` or `{API_URL_ENVVAR}` env var must be set",
))?
};
let api_key = if let Some(ref api_key) = client_envs.api_key {
api_key.to_string()
} else {
std::env::var(API_KEY_ENVVAR).context(format!(
"Either `--api-key` or `{API_KEY_ENVVAR}` env var must be set",
))?
};
Ok((api_url, api_key))
}