barter_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/websockets/#message-subscribe>
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/websockets/#message-subscribe>
19    pub const TRADES: Self = Self("trade");
20
21    /// [`Kraken`] real-time OrderBook Level1 (top of books) channel name.
22    ///
23    /// See docs: <https://docs.kraken.com/websockets/#message-subscribe>
24    pub const ORDER_BOOK_L1: Self = Self("spread");
25}
26
27impl<Instrument> Identifier<KrakenChannel> for Subscription<Kraken, Instrument, PublicTrades> {
28    fn id(&self) -> KrakenChannel {
29        KrakenChannel::TRADES
30    }
31}
32
33impl<Instrument> Identifier<KrakenChannel> for Subscription<Kraken, Instrument, OrderBooksL1> {
34    fn id(&self) -> KrakenChannel {
35        KrakenChannel::ORDER_BOOK_L1
36    }
37}
38
39impl AsRef<str> for KrakenChannel {
40    fn as_ref(&self) -> &str {
41        self.0
42    }
43}