tokio-binance

Crates.iotokio-binance
lib.rstokio-binance
version1.0.0
sourcesrc
created_at2020-02-09 21:57:16.141935
updated_at2021-02-12 21:23:59.702125
descriptionUnofficial async client for Binance.
homepage
repositoryhttps://github.com/kgeronim/tokio-binance
max_upload_size
id206840
size123,933
(kgeronim)

documentation

https://docs.rs/tokio-binance

README

tokio-binance

Unofficial async client for Binance.

Crates.io Documentation MIT/Apache-2 licensed Build Status

Examples

Add this in your Cargo.toml:

[dependencies]
tokio-binance = "1.0"
serde_json = "1.0.62"
tokio = { version = "1.2.0", features = ["macros", "time"] }

Client

use tokio_binance::{AccountClient, BINANCE_US_URL, ID};
use serde_json::Value;
 
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let client = AccountClient::connect("<api-key>", "<secret-key>", BINANCE_US_URL)?;
    let response = client
        .get_order("BNBUSDT", ID::ClientOId("<uuid>"))
        // optional: processing time for request; default is 5000, can't be above 60000.
        .with_recv_window(8000)
        //
        .json::<Value>()
        .await?;
    Ok(())
}

Websocket

use tokio_binance::*;
use tokio::time::{delay_for, Duration};
use serde_json::Value;
 
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let client = UserDataClient::connect("<api-key>", BINANCE_US_URL)?;
    let value = client.start_stream().json::<Value>().await?;
 
    let listen_key = value["listenKey"].as_str().unwrap();
    let listen_key_copy = listen_key.to_string();
 
    tokio::spawn(async move {
        loop {
            delay_for(Duration::from_secs(30*60)).await;
            if let Err(e) = client.keep_alive(&listen_key_copy).text().await {
                eprintln!("{}", e);
                return
            }
        }
    });
 
    let channel = Channel::UserData(listen_key);
    let mut stream = WebSocketStream::connect(channel, BINANCE_US_WSS_URL).await?;
 
    while let Some(value) = stream.json::<Value>().await? {
        if channel == value["stream"] {
            println!("{}", serde_json::to_string_pretty(&value)?);
        }
    }
    Ok(())
}

License

Licensed under either of

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Commit count: 1

cargo fmt