use crate::error::Result;
use async_trait::async_trait;
use serde::{Deserialize, Serialize};
use serde_json::Value;
#[derive(Debug, Default, Serialize, Deserialize)]
pub struct ConnectionGetAllOptions {
pub alias: Option<String>,
pub connection_protocol: Option<String>,
pub invitation_key: Option<String>,
pub my_did: Option<String>,
pub state: Option<String>,
pub their_did: Option<String>,
pub their_role: Option<String>,
}
#[derive(Debug, Clone, Eq, PartialEq, Serialize, Deserialize)]
pub struct Invitation {
#[serde(alias = "invitationUrl")]
pub invitation_url: String,
pub invitation: Value,
#[serde(alias = "connection_id")]
pub id: String,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct Connection {
#[serde(alias = "connection_id")]
pub id: String,
#[serde(alias = "createdAt")]
pub created_at: String,
#[serde(alias = "my_did")]
#[serde(skip_serializing_if = "Option::is_none")]
pub did: Option<String>,
pub state: String,
#[serde(alias = "their_role")]
pub role: String,
#[serde(alias = "accept", alias = "autoAcceptConnection")]
#[serde(skip_serializing_if = "Option::is_none")]
pub auto_accept: Option<Value>,
#[serde(alias = "theirLabel")]
#[serde(skip_serializing_if = "Option::is_none")]
pub their_label: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub their_did: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub verkey: Option<String>,
}
#[derive(Debug, Default)]
pub struct ConnectionCreateInvitationOptions {
pub auto_accept: bool,
pub qr: bool,
pub toolbox: bool,
pub multi_use: bool,
pub alias: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ConnectionReceiveInvitationOptions {
#[serde(rename = "@id")]
#[serde(skip_serializing_if = "Option::is_none")]
pub id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub did: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub image_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub label: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub recipient_keys: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub routing_keys: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub service_endpoint: Option<String>,
}
#[async_trait]
pub trait ConnectionModule {
async fn get_all(&self, options: ConnectionGetAllOptions) -> Result<Vec<Connection>>;
async fn get_by_id(&self, id: String) -> Result<Connection>;
async fn create_invitation(
&self,
options: ConnectionCreateInvitationOptions,
) -> Result<Invitation>;
async fn receive_invitation(
&self,
invitation: ConnectionReceiveInvitationOptions,
) -> Result<Connection>;
}