use clap::Parser;
use cosmian_kms_client::KmsClientConfig;
use serde::{Deserialize, Serialize};
use super::IDENTITIES_ENDPOINT;
use crate::{actions::kms::google::gmail_client::GmailClient, error::result::KmsCliResult};
#[derive(Serialize, Deserialize)]
#[expect(non_snake_case)]
struct IdentityInfo {
primaryKeyPairId: String,
emailAddress: String,
}
#[derive(Parser)]
#[clap(verbatim_doc_comment)]
pub struct PatchIdentitiesAction {
#[clap(required = true)]
key_pairs_id: String,
#[clap(long = "user-id", short = 'u', required = true)]
user_id: String,
}
impl PatchIdentitiesAction {
pub async fn run(&self, config: KmsClientConfig) -> KmsCliResult<()> {
let gmail_client = GmailClient::new(config, &self.user_id);
let endpoint = [IDENTITIES_ENDPOINT, &self.user_id].concat();
let identity_info = IdentityInfo {
primaryKeyPairId: self.key_pairs_id.clone(),
emailAddress: self.user_id.clone(),
};
let response = gmail_client
.await?
.patch(&endpoint, serde_json::to_string(&identity_info)?)
.await?;
GmailClient::handle_response(response).await
}
}