Skip to main content

rustrade_data/exchange/kraken/
channel.rs

1use super::Kraken;
2use crate::{
3    Identifier,
4    subscription::{Subscription, book::OrderBooksL1, trade::PublicTrades},
5};
6use serde::Serialize;
7
8/// Type that defines how to translate a Barter [`Subscription`] into a
9/// [`Kraken`] channel to be subscribed to.
10///
11/// See docs: <https://docs.kraken.com/exchange/api-reference/spot-websocket-v2/trade>
12#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug, Serialize)]
13pub struct KrakenChannel(pub &'static str);
14
15impl KrakenChannel {
16    /// [`Kraken`] real-time trades channel name.
17    ///
18    /// See docs: <https://docs.kraken.com/exchange/api-reference/spot-websocket-v2/trade>
19    pub const TRADES: Self = Self("trade");
20
21    /// [`Kraken`] real-time OrderBook Level1 (top of books) channel name.
22    ///
23    /// The ticker channel, subscribed with `event_trigger: "bbo"` so it updates on every change
24    /// to the best bid or offer rather than on each trade.
25    ///
26    /// See docs: <https://docs.kraken.com/exchange/api-reference/spot-websocket-v2/ticker>
27    pub const ORDER_BOOK_L1: Self = Self("ticker");
28}
29
30impl<Instrument> Identifier<KrakenChannel> for Subscription<Kraken, Instrument, PublicTrades> {
31    fn id(&self) -> KrakenChannel {
32        KrakenChannel::TRADES
33    }
34}
35
36impl<Instrument> Identifier<KrakenChannel> for Subscription<Kraken, Instrument, OrderBooksL1> {
37    fn id(&self) -> KrakenChannel {
38        KrakenChannel::ORDER_BOOK_L1
39    }
40}
41
42impl AsRef<str> for KrakenChannel {
43    fn as_ref(&self) -> &str {
44        self.0
45    }
46}