#![allow(new_ret_no_self)]
use std::path::PathBuf;
use exchange::{Exchange, ExchangeApi};
use bitstamp::{BitstampApi, BitstampCreds};
use kraken::{KrakenApi, KrakenCreds};
use poloniex::{PoloniexApi, PoloniexCreds};
use bittrex::{BittrexApi, BittrexCreds};
use gdax::{GdaxApi, GdaxCreds};
use error::*;
pub trait Credentials {
fn get(&self, cred: &str) -> Option<String>;
fn exchange(&self) -> Exchange;
fn name(&self) -> String;
}
#[derive(Debug)]
pub struct Coinnect;
impl Coinnect {
pub fn new<C: Credentials>(exchange: Exchange, creds: C) -> Result<Box<ExchangeApi>> {
match exchange {
Exchange::Bitstamp => Ok(Box::new(BitstampApi::new(creds)?)),
Exchange::Kraken => Ok(Box::new(KrakenApi::new(creds)?)),
Exchange::Poloniex => Ok(Box::new(PoloniexApi::new(creds)?)),
Exchange::Bittrex => Ok(Box::new(BittrexApi::new(creds)?)),
Exchange::Gdax => Ok(Box::new(GdaxApi::new(creds)?)),
}
}
pub fn new_from_file(exchange: Exchange,
name: &str,
path: PathBuf)
-> Result<Box<ExchangeApi>> {
match exchange {
Exchange::Bitstamp => {
Ok(Box::new(BitstampApi::new(BitstampCreds::new_from_file(name, path)?)?))
}
Exchange::Kraken => {
Ok(Box::new(KrakenApi::new(KrakenCreds::new_from_file(name, path)?)?))
}
Exchange::Poloniex => {
Ok(Box::new(PoloniexApi::new(PoloniexCreds::new_from_file(name, path)?)?))
}
Exchange::Bittrex => {
Ok(Box::new(BittrexApi::new(BittrexCreds::new_from_file(name, path)?)?))
}
Exchange::Gdax => {
Ok(Box::new(GdaxApi::new(GdaxCreds::new_from_file(name, path)?)?))
}
}
}
}