use clap::Parser;
use cosmian_kms_client::{KmsClient, kmip_2_1::kmip_types::UniqueIdentifier};
use crate::{
actions::kms::{
labels::KEY_ID,
shared::{get_key_uid, utils::revoke},
},
error::result::KmsCliResult,
};
#[derive(Parser, Default, Debug)]
pub struct RevokeOpaqueObjectAction {
#[clap(required = true)]
pub(crate) revocation_reason: String,
#[clap(long = KEY_ID, short = 'k', group = "key-tags")]
pub(crate) object_id: Option<String>,
#[clap(long = "tag", short = 't', value_name = "TAG", group = "key-tags")]
pub(crate) tags: Option<Vec<String>>,
}
impl RevokeOpaqueObjectAction {
pub(crate) async fn run(&self, kms_rest_client: KmsClient) -> KmsCliResult<UniqueIdentifier> {
let id = get_key_uid(self.object_id.as_ref(), self.tags.as_ref(), KEY_ID)?;
revoke(kms_rest_client, &id, &self.revocation_reason).await
}
}