luno 0.3.0

An unofficial Rust wrapper for the Luno API.
Documentation
use std::future::Future;

use serde::{Deserialize, Serialize};

use crate::client;

#[derive(Debug, Serialize, Deserialize)]
pub struct Account {
    pub id: Option<String>,
    pub currency: String,
    pub name: String,
}

#[derive(Debug, Deserialize)]
pub struct Balance {
    pub account_id: String,
    pub asset: String,
    pub balance: String,
    pub reserved: String,
    pub unconfirmed: String,
    pub name: Option<String>,
}

#[derive(Debug, Deserialize)]
pub struct BalanceList {
    pub balance: Option<Vec<Balance>>,
}

#[derive(Debug, Deserialize)]
pub struct UpdateAccountNameResponse {
    pub success: bool,
}
pub struct ListBalancesBuilder<'a> {
    pub(crate) luno_client: &'a client::LunoClient,
    pub(crate) url: reqwest::Url,
    pub(crate) assets: Option<&'a [&'a str]>,
}

impl<'a> ListBalancesBuilder<'a> {
    pub fn with_assets(&mut self, assets: &'a [&'a str]) -> &mut ListBalancesBuilder<'a> {
        self.assets = Some(assets);
        self
    }

    pub fn list(&self) -> impl Future<Output = Result<BalanceList, reqwest::Error>> + '_ {
        let mut url = self.url.clone();
        if let Some(assets) = self.assets {
            url.query_pairs_mut()
                .append_pair("assets", &assets.join(","));
        }
        self.luno_client.get(url)
    }
}