Skip to main content

luno/
accounts.rs

1use std::future::Future;
2
3use serde::{Deserialize, Serialize};
4
5use crate::client;
6
7#[derive(Debug, Serialize, Deserialize)]
8pub struct Account {
9    pub id: Option<String>,
10    pub currency: String,
11    pub name: String,
12}
13
14#[derive(Debug, Deserialize)]
15pub struct Balance {
16    pub account_id: String,
17    pub asset: String,
18    pub balance: String,
19    pub reserved: String,
20    pub unconfirmed: String,
21    pub name: Option<String>,
22}
23
24#[derive(Debug, Deserialize)]
25pub struct BalanceList {
26    pub balance: Option<Vec<Balance>>,
27}
28
29#[derive(Debug, Deserialize)]
30pub struct UpdateAccountNameResponse {
31    pub success: bool,
32}
33pub struct ListBalancesBuilder<'a> {
34    pub(crate) luno_client: &'a client::LunoClient,
35    pub(crate) url: reqwest::Url,
36    pub(crate) assets: Option<&'a [&'a str]>,
37}
38
39impl<'a> ListBalancesBuilder<'a> {
40    pub fn with_assets(&mut self, assets: &'a [&'a str]) -> &mut ListBalancesBuilder<'a> {
41        self.assets = Some(assets);
42        self
43    }
44
45    pub fn list(&self) -> impl Future<Output = Result<BalanceList, reqwest::Error>> + '_ {
46        let mut url = self.url.clone();
47        if let Some(assets) = self.assets {
48            url.query_pairs_mut()
49                .append_pair("assets", &assets.join(","));
50        }
51        self.luno_client.get(url)
52    }
53}