1#[macro_use]
4extern crate failure;
5
6#[macro_use]
7extern crate serde_derive;
8extern crate rand;
9extern crate serde;
10
11extern crate cxmr_balances;
12extern crate cxmr_feeds;
13extern crate cxmr_orderbook;
14extern crate cxmr_ta_core;
15#[macro_use]
16extern crate err_convert_macro;
17
18mod impls;
19mod indicators;
20mod operation;
21
22pub use self::indicators::*;
23pub use self::operation::*;
24
25pub mod traits {
26 pub use cxmr_ta_core::{Close, High, Low, Next, Open, Volume};
27
28 pub trait OrderBook {
30 fn orderbook(&self) -> Option<&cxmr_orderbook::OrderBook>;
32 }
33
34 pub trait Time {
36 fn time(&self) -> u64;
38 }
39
40 pub trait State: Open + Close + Low + High + Volume + OrderBook + Time {}
42
43 impl<T: Open + Close + Low + High + Volume + OrderBook + Time> State for T {}
44}
45
46#[derive(Debug, Fail)]
48pub enum Error {
49 #[fail(display = "invalid indicator {:#?} parameters {:#?}.", _0, _1)]
51 InvalidParams(Indicator, Params),
52 #[fail(display = "expected parameters for indicator {:#?}.", _0)]
54 ExpectedParams(Indicator),
55 #[fail(display = "expected {} parameter for indicator {:#?}.", _1, _0)]
57 ExpectedParameter(Indicator, usize),
58 #[fail(display = "indicator {:#?} is not implemented.", _0)]
60 IndicatorNotImplemented(Indicator),
61 #[fail(display = "{}", _0)]
63 Ta(cxmr_ta_core::errors::Error),
64}
65
66err_converter!(Ta, cxmr_ta_core::errors::Error);
67
68unsafe impl Send for Error {}
69unsafe impl Sync for Error {}