deribit 0.3.3

Rust client for deribit. Please look at tests/examples for detailed usages.
Documentation
use anyhow::Error;
use deribit::{
    models::{AuthRequest, Currency, GetAccountSummaryRequest, GetSubaccountsRequest},
    Deribit, DeribitBuilder,
};
use fehler::{throw, throws};
use std::env::var;
use tokio::runtime::Runtime;

pub struct AccountTest {
    key: String,
    secret: String,
    drb: Deribit,
    rt: Runtime,
}

impl Default for AccountTest {
    fn default() -> Self {
        let _ = env_logger::try_init();
        Self {
            key: var("DERIBIT_KEY").unwrap(),
            secret: var("DERIBIT_SECRET").unwrap(),
            drb: DeribitBuilder::default().testnet(true).build().unwrap(),
            rt: Runtime::new().unwrap(),
        }
    }
}

#[test]
#[throws(Error)]
fn get_account_summary() {
    let AccountTest {
        rt,
        drb,
        key,
        secret,
    } = AccountTest::default();
    let fut = async move {
        let (mut client, _) = drb.connect().await?;
        let req = AuthRequest::credential_auth(&key, &secret);
        let _ = client.call(req).await?.await?;
        let req = GetAccountSummaryRequest::extended(Currency::BTC);
        Ok::<_, Error>(client.call(req).await?.await?)
    };
    let resp = rt.block_on(fut);
    if let Err(err) = resp {
        println!("{:?}", err);
        throw!(err);
    }
}

#[test]
#[throws(Error)]
fn get_subaccounts() {
    let AccountTest {
        rt,
        drb,
        key,
        secret,
    } = AccountTest::default();
    let fut = async move {
        let (mut client, _) = drb.connect().await?;
        let req = AuthRequest::credential_auth(&key, &secret);
        let _ = client.call(req).await?.await?;

        let req = GetSubaccountsRequest::with_portfolio();
        Ok::<_, Error>(client.call(req).await?.await?)
    };
    let resp = rt.block_on(fut);
    if let Err(err) = resp {
        println!("{:?}", err);
        throw!(err);
    }
}