use crate::path::AbsolutePath;
use crate::provider::{
AuthToken, ProviderError, Signature,
references::{HasReference, OpReference},
};
use async_trait::async_trait;
use clap::Args;
use locket_derive::LayeredConfig;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub struct OpConfig {
pub op_token: AuthToken,
pub op_config_dir: Option<AbsolutePath>,
}
impl HasReference for OpConfig {
type Reference = OpReference;
}
#[async_trait]
impl Signature for OpConfig {
async fn signature(&self) -> Result<u64, ProviderError> {
self.op_token.signature().await
}
}
#[derive(
Args, Debug, Clone, Default, LayeredConfig, Deserialize, Serialize, PartialEq, Eq, Hash,
)]
#[serde(rename_all = "kebab-case")]
#[locket(try_into = "OpConfig")]
pub struct OpArgs {
#[arg(long, env = "OP_SERVICE_ACCOUNT_TOKEN", hide_env_values = true)]
pub op_token: Option<AuthToken>,
#[arg(long, env = "OP_CONFIG_DIR")]
#[locket(optional)]
pub op_config_dir: Option<AbsolutePath>,
}