exc_make/
lib.rs

1#![deny(missing_docs)]
2
3//! `exc-make`: Define what an exchange is with [`MakeService`](tower_make::MakeService)s.
4
5/// Make a service to subscribe instruments.
6pub mod instruments;
7
8/// Make a service to subscribe tickers.
9pub mod tickers;
10
11/// Make a service to fetch candles.
12pub mod candles;
13
14/// Make a service to place orders.
15pub mod place;
16
17/// Make a service to cancel orders.
18pub mod cancel;
19
20/// Make a service to check orders.
21pub mod check;
22
23/// Make a service to subscribe order updates.
24pub mod orders;
25
26pub use self::{
27    cancel::{MakeCancelOrder, MakeCancelOrderOptions},
28    candles::{MakeFetchCandles, MakeFetchCandlesOptions},
29    check::{MakeCheckOrder, MakeCheckOrderOptions},
30    instruments::{MakeInstruments, MakeInstrumentsOptions},
31    orders::{MakeSubscribeOrders, MakeSubscribeOrdersOptions},
32    place::{MakePlaceOrder, MakePlaceOrderOptions},
33    tickers::{MakeTickers, MakeTickersOptions},
34};
35
36/// Define `AsService`s.
37#[macro_export(local_inner_macros)]
38macro_rules! create_as_service {
39    ($make_trait:ident, $options_type:ident, $method:ident, $doc:expr) => {
40        #[doc = $doc]
41        #[derive(Debug)]
42        pub struct AsService<'a, M>
43        where
44            M: $make_trait,
45        {
46            make: &'a mut M,
47        }
48
49        impl<M> tower_service::Service<$options_type> for AsService<'_, M>
50        where
51            M: $make_trait,
52        {
53            type Response = M::Service;
54            type Error = ExchangeError;
55            type Future = M::Future;
56
57            #[inline]
58            fn poll_ready(&mut self, cx: &mut Context<'_>) -> Poll<Result<(), Self::Error>> {
59                self.make.poll_ready(cx)
60            }
61
62            #[inline]
63            fn call(&mut self, options: $options_type) -> Self::Future {
64                self.make.$method(options)
65            }
66        }
67    };
68}