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}