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}