deribit 0.3.3

Rust client for deribit. Please look at tests/examples for detailed usages.
Documentation
use anyhow::Error;
use deribit::{
    models::{
        AuthRequest, BuyRequest, CancelByLabelRequest, CancelRequest, Currency, EditRequest,
        GetOpenOrdersByCurrencyRequest, GetOpenOrdersByInstrumentRequest, GetOrderStateRequest,
        SellRequest,
    },
    DeribitBuilder,
};
use fehler::throws;
use std::{env::var, time::Duration};
use tokio::{runtime::Runtime, time::sleep};

#[test]
#[throws(Error)]
fn get_order_state() {
    let key = var("DERIBIT_KEY").unwrap();
    let secret = var("DERIBIT_SECRET").unwrap();

    let drb = DeribitBuilder::default().testnet(true).build().unwrap();
    let rt = Runtime::new().expect("cannot create tokio runtime");

    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 = GetOrderStateRequest::new("5703080407");
        Ok::<_, Error>(client.call(req).await?.await?)
    };
    let _ = rt.block_on(fut)?;
}

#[test]
#[throws(Error)]
fn buy_and_sell() {
    let key = var("DERIBIT_KEY").unwrap();
    let secret = var("DERIBIT_SECRET").unwrap();
    let drb = DeribitBuilder::default().testnet(true).build().unwrap();
    let rt = Runtime::new().expect("cannot create tokio runtime");

    let fut = async move {
        let (mut client, _) = drb.connect().await?;
        let req = AuthRequest::credential_auth(&key, &secret);
        let _ = client.call(req).await?.await?;

        client
            .call(BuyRequest::market("BTC-PERPETUAL", 10.))
            .await?
            .await?;
        sleep(Duration::from_secs(1)).await;

        client
            .call(SellRequest::market("BTC-PERPETUAL", 10.))
            .await?
            .await?;
        Ok::<_, Error>(())
    };
    let _ = rt.block_on(fut)?;
}

#[test]
#[throws(Error)]
fn buy_and_edit_and_inspect_and_cancel() {
    let key = var("DERIBIT_KEY").unwrap();
    let secret = var("DERIBIT_SECRET").unwrap();
    let drb = DeribitBuilder::default().testnet(true).build().unwrap();
    let rt = Runtime::new().expect("cannot create tokio runtime");

    let fut = async move {
        let (mut client, _) = drb.connect().await?;
        let req = AuthRequest::credential_auth(&key, &secret);
        let _ = client.call(req).await?.await?;

        let id = client
            .call(BuyRequest::limit("BTC-PERPETUAL", 1000., 10.))
            .await?
            .await?
            .0
            .order
            .order_id;

        client
            .call(EditRequest::new(&id, 1200., 10.))
            .await?
            .await?;
        client
            .call(GetOpenOrdersByCurrencyRequest::by_currency(Currency::BTC))
            .await?
            .await?;
        client
            .call(GetOpenOrdersByInstrumentRequest::by_instrument(
                "BTC-PERPETUAL",
            ))
            .await?
            .await?;
        client.call(CancelRequest::new(&id)).await?.await?;
        Ok::<_, Error>(())
    };
    let _ = rt.block_on(fut)?;
}

#[test]
#[throws(Error)]
fn buy_and_cancel_by_label() {
    let key = var("DERIBIT_KEY").unwrap();
    let secret = var("DERIBIT_SECRET").unwrap();
    let drb = DeribitBuilder::default().testnet(true).build().unwrap();
    let rt = Runtime::new().expect("cannot create tokio runtime");

    let fut = async move {
        let (mut client, _) = drb.connect().await?;
        let req = AuthRequest::credential_auth(&key, &secret);
        let _ = client.call(req).await?.await?;

        let mut req = BuyRequest::limit("BTC-PERPETUAL", 1000., 10.);
        req.label = Some("happy".to_string());

        client.call(req).await?.await?.0.order.order_id;

        client
            .call(CancelByLabelRequest::new("happy"))
            .await?
            .await?;
        Ok::<_, Error>(())
    };
    let _ = rt.block_on(fut)?;
}