use super::types::{AssetTransfersOptions, AssetTransfersResponse};
use crate::client::Client;
use crate::error::Result;
pub struct TransfersApi<'a> {
client: &'a Client,
}
impl<'a> TransfersApi<'a> {
pub(crate) fn new(client: &'a Client) -> Self {
Self { client }
}
pub async fn get_asset_transfers(
&self,
options: &AssetTransfersOptions,
) -> Result<AssetTransfersResponse> {
self.client
.rpc("alchemy_getAssetTransfers", vec![options])
.await
}
pub async fn get_transfers_from(&self, address: &str) -> Result<AssetTransfersResponse> {
let options = AssetTransfersOptions::from_address(address).with_metadata();
self.get_asset_transfers(&options).await
}
pub async fn get_transfers_to(&self, address: &str) -> Result<AssetTransfersResponse> {
let options = AssetTransfersOptions::to_address(address).with_metadata();
self.get_asset_transfers(&options).await
}
pub async fn get_all_transfers(
&self,
address: &str,
) -> Result<(AssetTransfersResponse, AssetTransfersResponse)> {
let from = self.get_transfers_from(address).await?;
let to = self.get_transfers_to(address).await?;
Ok((from, to))
}
pub async fn get_next_page(
&self,
options: &AssetTransfersOptions,
page_key: &str,
) -> Result<AssetTransfersResponse> {
let mut new_options = options.clone();
new_options.page_key = Some(page_key.to_string());
self.get_asset_transfers(&new_options).await
}
}