core/src/main.rs

91 lines
2.2 KiB
Rust
Raw Normal View History

2021-01-14 12:42:23 +00:00
#![feature(drain_filter)]
2021-01-15 11:10:00 +00:00
#![feature(bool_to_option)]
2021-01-14 12:42:23 +00:00
2021-02-13 13:49:06 +00:00
use std::env;
2021-01-14 18:56:31 +00:00
use fern::colors::{Color, ColoredLevelConfig};
use log::error;
use log::LevelFilter::Info;
2021-01-14 18:56:31 +00:00
use tokio::time::Duration;
2021-01-04 10:45:54 +00:00
use crate::bot::BfxBot;
2021-01-26 11:15:04 +00:00
use crate::connectors::ExchangeDetails;
2021-01-14 18:56:31 +00:00
use crate::currency::Symbol;
2021-01-02 14:10:16 +00:00
2021-01-05 12:58:47 +00:00
mod bot;
mod connectors;
mod currency;
2021-01-02 12:15:19 +00:00
mod events;
2021-02-18 09:37:48 +00:00
mod frontend;
2021-01-13 09:03:24 +00:00
mod managers;
mod models;
2021-01-02 14:10:16 +00:00
mod strategy;
2021-01-05 12:58:47 +00:00
mod ticker;
2021-02-25 20:39:04 +00:00
mod tests;
mod sounds;
2021-01-01 14:07:16 +00:00
pub type BoxError = Box<dyn std::error::Error + Send + Sync>;
#[tokio::main]
async fn main() -> Result<(), BoxError> {
if let Err(e) = setup_logger() {
error!("Could not setup logger: {}", e);
return Err(e.into());
}
if let Err(e) = dotenv::dotenv() {
error!("Could not open .env file: {}", e);
return Err(e.into());
}
2021-01-14 18:56:31 +00:00
2021-02-13 13:49:06 +00:00
let api_key = env::vars()
2021-02-18 09:37:48 +00:00
.find(|(k, _v)| k == "API_KEY")
.map(|(_k, v)| v)
2021-02-13 13:49:06 +00:00
.ok_or("API_KEY not set!")?;
let api_secret = env::vars()
2021-02-18 09:37:48 +00:00
.find(|(k, _v)| k == "API_SECRET")
.map(|(_k, v)| v)
2021-02-13 13:49:06 +00:00
.ok_or("API_SECRET not set!")?;
2021-01-26 11:15:04 +00:00
let bitfinex = ExchangeDetails::Bitfinex {
2021-02-13 13:49:06 +00:00
api_key: api_key.into(),
api_secret: api_secret.into(),
2021-01-14 12:42:23 +00:00
};
2021-01-05 19:50:14 +00:00
let mut bot = BfxBot::new(
2021-01-14 12:42:23 +00:00
vec![bitfinex],
2021-02-13 13:49:06 +00:00
vec![Symbol::DERIV_ETH, Symbol::DERIV_BTC],
Symbol::DERIV_USDT,
Duration::new(10, 0),
);
2021-01-02 14:10:16 +00:00
2021-01-05 19:50:14 +00:00
Ok(bot.start_loop().await?)
2021-01-01 14:07:16 +00:00
}
2021-01-14 18:56:31 +00:00
fn setup_logger() -> Result<(), fern::InitError> {
let colors = ColoredLevelConfig::new()
.info(Color::Green)
.error(Color::Red)
.trace(Color::Blue)
.debug(Color::Cyan)
.warn(Color::Yellow);
fern::Dispatch::new()
.format(move |out, message, record| {
out.finish(format_args!(
"{} | [{}][{}] | {}",
chrono::Local::now().format("[%d/%m/%Y][%H:%M:%S]"),
record.target().strip_prefix("rustico::").unwrap_or("rustico"),
2021-01-14 18:56:31 +00:00
colors.color(record.level()),
message
))
})
.level(Info)
.filter(|metadata| metadata.target().contains("rustico"))
2021-01-14 18:56:31 +00:00
.chain(std::io::stdout())
.chain(fern::log_file("rustico.log")?)
2021-01-14 18:56:31 +00:00
.apply()?;
Ok(())
}