use cdk::wallet::{
BackupOptions as CdkBackupOptions, BackupResult as CdkBackupResult,
RestoreOptions as CdkRestoreOptions, RestoreResult as CdkRestoreResult,
};
use super::MintUrl;
#[derive(Debug, Clone, Default, uniffi::Record)]
pub struct BackupOptions {
pub client: Option<String>,
}
impl From<BackupOptions> for CdkBackupOptions {
fn from(options: BackupOptions) -> Self {
let mut opts = CdkBackupOptions::new();
if let Some(client) = options.client {
opts = opts.client(client);
}
opts
}
}
#[derive(Debug, Clone, uniffi::Record)]
pub struct RestoreOptions {
pub timeout_secs: u64,
}
impl Default for RestoreOptions {
fn default() -> Self {
Self { timeout_secs: 10 }
}
}
impl From<RestoreOptions> for CdkRestoreOptions {
fn from(options: RestoreOptions) -> Self {
CdkRestoreOptions::new().timeout(std::time::Duration::from_secs(options.timeout_secs))
}
}
#[derive(Debug, Clone, uniffi::Record)]
pub struct BackupResult {
pub event_id: String,
pub public_key: String,
pub mint_count: u64,
}
impl From<CdkBackupResult> for BackupResult {
fn from(result: CdkBackupResult) -> Self {
Self {
event_id: result.event_id.to_hex(),
public_key: result.public_key.to_hex(),
mint_count: result.mint_count as u64,
}
}
}
#[derive(Debug, Clone, uniffi::Record)]
pub struct RestoreResult {
pub backup: MintBackup,
pub mint_count: u64,
pub mints_added: u64,
}
impl From<CdkRestoreResult> for RestoreResult {
fn from(result: CdkRestoreResult) -> Self {
Self {
backup: result.backup.into(),
mint_count: result.mint_count as u64,
mints_added: result.mints_added as u64,
}
}
}
#[derive(Debug, Clone, uniffi::Record)]
pub struct MintBackup {
pub mints: Vec<MintUrl>,
pub timestamp: u64,
}
impl From<cdk::nuts::nut27::MintBackup> for MintBackup {
fn from(backup: cdk::nuts::nut27::MintBackup) -> Self {
Self {
mints: backup.mints.into_iter().map(|m| m.into()).collect(),
timestamp: backup.timestamp,
}
}
}