Build Status Crates.io Docs.rs

Coinbase pro client for Rust

Supports SYNC/ASYNC/Websocket-feed data support

Features

Examples

Cargo.toml: toml [dependencies] coinbase-pro-rs = "0.2.3"

Async

```rust extern crate hyper; extern crate tokio; extern crate coinbaseprors;

use hyper::rt::Future; use coinbaseprors::{Public, ASync, SANDBOX_URL};

fn main() { let client: Public = Public::Public::newwithkeepalive(SANDBOXURL, false); // if keepalive is not disables - tokio::run will hold the connection without exiting the example let f = client.gettime() .maperr(|| ()) .and_then(|time| { println!("Coinbase.time: {}", time.iso); Ok(()) });

tokio::run(f); // waiting for tokio

} ```

Sync

```rust extern crate coinbaseprors;

use coinbaseprors::{Public, Sync, SANDBOX_URL};

fn main() { let client: Public = Public::new(SANDBOXURL); let time = client.gettime().unwrap(); println!("Coinbase.time: {}", time.iso); } ```

Websocket

```rust extern crate futures; extern crate tokio; extern crate coinbaseprors;

use futures::{Future, Stream}; use coinbaseprors::{WSFeed, WSSANDBOXURL}; use coinbaseprors::structs::wsfeed::*;

fn main() { let stream = WSFeed::new(WSSANDBOXURL, &["BTC-USD"], &[ChannelType::Heartbeat]);

let f = stream
    .take(10)
    .for_each(|msg| {
    match msg {
        Message::Heartbeat {sequence, last_trade_id, time, ..} => println!("{}: seq:{} id{}",
                                                                           time, sequence, last_trade_id),
        Message::Error {message} => println!("Error: {}", message),
        Message::InternalError(_) => panic!("internal_error"),
        other => println!("{:?}", other)
    }
    Ok(())
});

tokio::run(f.map_err(|_| panic!("stream fail")));

} ```

Api supported:

API

FIX API

by request

OrderBook

https://github.com/inv2004/orderbook-rs

Tests

cargo test -- --test-threads=1 // to avoid "Rate limit exceeded" error