Skip to main content

tesser_events/
lib.rs

1use serde::{Deserialize, Serialize};
2use tesser_core::{Candle, Fill, Order, OrderBook, Signal, Tick};
3use tokio::sync::broadcast;
4
5#[derive(Clone, Debug, Serialize, Deserialize)]
6pub struct TickEvent {
7    pub tick: Tick,
8}
9
10#[derive(Clone, Debug, Serialize, Deserialize)]
11pub struct CandleEvent {
12    pub candle: Candle,
13}
14
15#[derive(Clone, Debug, Serialize, Deserialize)]
16pub struct OrderBookEvent {
17    pub order_book: OrderBook,
18}
19
20#[derive(Clone, Debug, Serialize, Deserialize)]
21pub struct SignalEvent {
22    pub signal: Signal,
23}
24
25#[derive(Clone, Debug, Serialize, Deserialize)]
26pub struct FillEvent {
27    pub fill: Fill,
28}
29
30#[derive(Clone, Debug, Serialize, Deserialize)]
31pub struct OrderUpdateEvent {
32    pub order: Order,
33}
34
35#[derive(Clone, Debug, Serialize, Deserialize)]
36pub enum Event {
37    Tick(TickEvent),
38    Candle(CandleEvent),
39    OrderBook(OrderBookEvent),
40    Signal(SignalEvent),
41    Fill(FillEvent),
42    OrderUpdate(OrderUpdateEvent),
43}
44
45pub struct EventBus {
46    sender: broadcast::Sender<Event>,
47}
48
49impl EventBus {
50    pub fn new(capacity: usize) -> Self {
51        let (sender, _) = broadcast::channel(capacity);
52        Self { sender }
53    }
54
55    pub fn subscribe(&self) -> EventStream {
56        EventStream {
57            receiver: self.sender.subscribe(),
58        }
59    }
60
61    pub fn publish(&self, event: Event) {
62        let _ = self.sender.send(event);
63    }
64}
65
66pub struct EventStream {
67    receiver: broadcast::Receiver<Event>,
68}
69
70impl EventStream {
71    pub async fn recv(&mut self) -> Result<Event, broadcast::error::RecvError> {
72        self.receiver.recv().await
73    }
74}