use super::register::Module;
use crate::agent::agents::Agent;
use async_trait::async_trait;
use clap::ArgMatches;
use serde::{Deserialize, Serialize};
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct CredentialDefinitions {
pub credential_definition_ids: Vec<String>,
}
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct CredentialDefinition {
pub sent: CredentialDefinitionSent,
}
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct CredentialDefinitionSent {
pub credential_definition_id: String,
}
pub struct CredentialDefinitionConfig {
pub schema_id: Option<String>,
pub tag: String,
}
pub struct CredentialDefinitionModule;
#[async_trait(?Send)]
impl Module<CredentialDefinitionConfig> for CredentialDefinitionModule {
async fn run(agent: &dyn Agent, config: CredentialDefinitionConfig) {
let output = match config.schema_id {
Some(_) => vec![
agent
.credential_definition(&config)
.await
.sent
.credential_definition_id,
],
None => {
agent
.credential_definitions()
.await
.credential_definition_ids
}
};
agent.logger().log_pretty(output);
}
async fn register<'a>(agent: &dyn Agent, matches: &ArgMatches<'a>) {
if let Some(matches_credential_definition) =
matches.subcommand_matches("credential-definition")
{
let schema_id = matches_credential_definition
.value_of("schema-id")
.map(|x| x.to_string());
let tag = matches_credential_definition
.value_of("tag")
.unwrap_or("default")
.to_string();
let config = CredentialDefinitionConfig { schema_id, tag };
CredentialDefinitionModule::run(agent, config).await;
}
}
}