use crate::cli::connections::Connection;
use crate::cli::connections::Connections;
use crate::cli::connections::ConnectionsConfig;
use crate::cli::credential_definition::CredentialDefinition;
use crate::cli::credential_definition::CredentialDefinitionConfig;
use crate::cli::credential_definition::CredentialDefinitions;
use crate::cli::features::Features;
use crate::cli::invite::Invitation;
use crate::cli::invite::InvitationConfig;
use crate::cli::issue_credential::IssueCredentialConfig;
use crate::cli::message::MessageConfig;
use crate::cli::schema::Schema;
use crate::cli::schema::SchemaConfig;
use crate::utils::logger::Log;
use async_trait::async_trait;
use serde_json::Value;
#[derive(Clone, Debug)]
pub struct BaseAgent {
pub logger: Log,
}
#[async_trait]
pub trait Agent {
fn logger(&self) -> Log;
async fn get_connections(&self, filter: ConnectionsConfig) -> Connections;
async fn get_connection_by_id(&self, id: String) -> Connection;
async fn create_invitation(&self, config: &InvitationConfig) -> Invitation;
async fn discover_features(&self) -> Features;
async fn send_message(&self, config: &MessageConfig);
async fn credential(&self, config: &IssueCredentialConfig) -> Value;
async fn schema(&self, config: &SchemaConfig) -> Schema;
async fn credential_definition(
&self,
config: &CredentialDefinitionConfig,
) -> CredentialDefinition;
async fn credential_definitions(&self) -> CredentialDefinitions;
}
#[async_trait]
pub trait HttpAgentExtended {
fn new(base_agent: BaseAgent, endpoint: String, api_key: Option<String>) -> Self;
async fn check_endpoint(&self) -> ();
}