use std::sync::Arc;
use async_trait::async_trait;
use thiserror::Error;
use crate::wallet::{GetBalanceResponse, WalletAddress, WalletTransaction};
#[derive(Debug, Error)]
#[error("{message}")]
pub struct WalletInfoError {
message: String,
}
impl WalletInfoError {
pub fn new(message: impl Into<String>) -> Self {
Self {
message: message.into(),
}
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct WalletTransactionPage {
pub transactions: Vec<WalletTransaction>,
pub total: u64,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct WalletAddressPage {
pub addresses: Vec<WalletAddress>,
pub total: u64,
}
#[async_trait]
pub trait WalletInfoProvider {
async fn get_balance(&self) -> Result<GetBalanceResponse, WalletInfoError>;
async fn list_transactions(
&self,
offset: usize,
limit: usize,
) -> Result<WalletTransactionPage, WalletInfoError>;
async fn list_addresses(
&self,
offset: usize,
limit: usize,
) -> Result<WalletAddressPage, WalletInfoError>;
}
pub type DynWalletInfoProvider = Arc<dyn WalletInfoProvider + Send + Sync>;