Expand description

Coinbase pro client with sync/async + websocket-feed support

Structure

There are two main structures to work with: Private and Public, which provide interfaces to work with https://docs.pro.coinbase.com . The structures should be parametrised with: Sync or ASync adapter-type, which blocks future and returns result of its execution for Sync adapter or returns Future for ASync adapter.

WSFeed provides futures::Stream of websocket message for different channels.

Examples

Async

use std::future::Future;
use coinbase_pro_rs::{Public, ASync, SANDBOX_URL};
use futures::{TryFutureExt};

#[tokio::main]
async fn main() {
    let client: Public<ASync> = Public::new_with_keep_alive(SANDBOX_URL, false);
    // if keep_alive is not disables - tokio::run will hold the connection without exiting the example
    client.get_time().await
        .map_err(|_| ())
        .and_then(|time| {
            println!("Coinbase.time: {}", time.iso);
            Ok(())
        });

}

Sync

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

fn main() {
   let client: Public<Sync> = Public::new(SANDBOX_URL);
   let time = client.get_time().unwrap();
   println!("Coinbase.time: {}", time.iso);
}

Websocket

use futures::{Future, Stream, StreamExt, TryStreamExt};
use coinbase_pro_rs::{WSFeed, CBError, WS_SANDBOX_URL};
use coinbase_pro_rs::structs::wsfeed::*;

#[tokio::main]
async fn main() {
    let stream = WSFeed::connect(WS_SANDBOX_URL,
        &["BTC-USD"], &[ChannelType::Heartbeat]).await.unwrap();

    stream
        .take(10)
        .for_each(|msg: Result<Message, CBError>| async {
        match msg.unwrap() {
            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)
        }
    }).await;
}

Re-exports

pub use crate::adapters::ASync;
pub use crate::adapters::Sync;
pub use crate::private::Private;
pub use crate::public::Public;
pub use crate::wsfeed::WSFeed;

Modules

Contains structure which provides access to Private section of Coinbase api

Contains structure which provides access to Public section of Coinbase api

Contains structure which provides futures::Stream to websocket-feed of Coinbase api

Enums

Coinbase-pro-rs error

Websocket specific errors

Constants

https://api.pro.coinbase.com

https://api-public.sandbox.pro.coinbase.com

wss://ws-feed-public.sandbox.pro.coinbase.com

wss://ws-feed.pro.coinbase.com

Type Definitions