use crate::error::Result;
use async_trait::async_trait;
use serde::{Deserialize, Serialize};
use serde_json::Value;
#[derive(Debug, Default, Serialize, Deserialize)]
pub struct OobConnectionCreateInvitationResponse {
#[serde(rename = "invi_msg_id")]
pub invitation_message_id: String,
pub invitation: Value,
pub oob_id: Option<String>,
pub invitation_url: String,
pub alias: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct OobConnection {
pub their_role: String,
pub created_at: String,
pub my_did: Option<String>,
pub connection_id: String,
pub their_did: Option<String>,
pub invitation_key: Option<String>,
pub state: String,
pub routing_state: String,
pub accept: String,
pub their_label: Option<String>,
pub invitation_mode: String,
pub rfc23_state: String,
pub updated_at: String,
pub alias: Option<String>,
pub request_id: Option<String>,
pub invitation_msg_id: Option<String>,
}
#[derive(Debug, Default)]
pub struct OobConnectionCreateInvitationOptions {
pub auto_accept: bool,
pub qr: bool,
pub handshake_protocol: String,
pub multi_use: bool,
pub alias: Option<String>,
}
pub type OobConnectionReceiveInvitationOptions = Value;
#[async_trait]
pub trait OobModule {
async fn create_invitation(
&self,
options: OobConnectionCreateInvitationOptions,
) -> Result<OobConnectionCreateInvitationResponse>;
async fn receive_invitation(
&self,
invitation: OobConnectionReceiveInvitationOptions,
) -> Result<OobConnection>;
}