#rest #cryptocurrency #async #kraken #async-api #api-bindings #api

calamari

Minimal, elegant and async REST API client for the Kraken cryptocurrency exchange

1 unstable release

0.1.0 May 22, 2021

#27 in #kraken

Download history 16/week @ 2024-02-19 21/week @ 2024-02-26 62/week @ 2024-03-04 19/week @ 2024-03-11 25/week @ 2024-03-18 14/week @ 2024-03-25 47/week @ 2024-04-01

108 downloads per month

ISC license

38KB
483 lines

calamari logo

Calamari

Minimal and elegant async REST API client for Kraken

Build Code Coverage Downloads (all time) ISC License

Calamari is a REST API client for Kraken.

Quickstart

The API client comes in two flavors: PublicApiClient and PrivateApiClient. The former has access to the public methods only, the latter to all endpoints. This is enforced at compile-time, as all the endpoints are defined statically in the traits PublicEndpoints and PrivateEndpoints.

use calamari::{PublicApiClient, PublicEndpoints};

// Note: to run this example you will need to add Tokio to your dependencies:
// tokio = { version = "1.0", features = ["macros", "rt-multi-thread"] }

#[tokio::main]
async fn main() {
    let client = PublicApiClient::default();
    println!("Server time: {}", client.time().await.unwrap());
    println!("System status: {}", client.system_status().await.unwrap());
    println!("Ticker: {}", client.ticker("pair=XBTUSD".into()).await.unwrap());
}

Each endpoint accepts either zero arguments or a single argument containing all the request parameters in urlencode format. All endpoints return a String containing the JSON response from the server, leaving the user with complete freedom in how they want to handle it.

A PrivateApiClient can be instantiated directly, or created from an existing PublicApiClient by supplying the API credentials with the set_credentials method.

use calamari::{ApiCredentials, PrivateApiClient, PublicEndpoints, PrivateEndpoints};

#[tokio::main]
async fn main() {
    let credentials = ApiCredentials::new(
        "YOUR_API_KEY".into(),
        "YOUR_API_SECRET".into(),
    );
    let client = PrivateApiClient::default_with_credentials(credentials);
    // Alternatively, if `client` is already a `PublicApiClient`:
    // let client = client.set_credentials(credentials);

    println!("Server time: {}", client.time().await.unwrap());
    println!("System status: {}", client.system_status().await.unwrap());
    println!("Ticker: {}", client.ticker("pair=XBTUSD".into()).await.unwrap());

    println!("Account balance: {}", client.balance().await.unwrap());
    println!("Open orders: {}", client.open_orders("trades=true".into()).await.unwrap());
}
Logo made by Freepik from www.flaticon.com

Dependencies

~4–17MB
~240K SLoC