kabu_core_blockchain/
strategy.rs

1use kabu_core_actors::Broadcaster;
2use kabu_evm_db::DatabaseKabuExt;
3use kabu_types_blockchain::{KabuDataTypes, KabuDataTypesEthereum};
4use kabu_types_entities::BlockHistoryState;
5use kabu_types_events::{MessageSwapCompose, StateUpdateEvent};
6use revm::{Database, DatabaseCommit, DatabaseRef};
7
8#[derive(Clone)]
9pub struct Strategy<DB: Clone + Send + Sync + 'static, LDT: KabuDataTypes + 'static = KabuDataTypesEthereum> {
10    swap_compose_channel: Broadcaster<MessageSwapCompose<DB, LDT>>,
11    state_update_channel: Broadcaster<StateUpdateEvent<DB, LDT>>,
12}
13
14impl<
15        DB: DatabaseRef + Database + DatabaseCommit + BlockHistoryState<LDT> + DatabaseKabuExt + Send + Sync + Clone + Default + 'static,
16        LDT: KabuDataTypes,
17    > Default for Strategy<DB, LDT>
18{
19    fn default() -> Self {
20        Self::new()
21    }
22}
23
24impl<
25        DB: DatabaseRef + Database + DatabaseCommit + BlockHistoryState<LDT> + DatabaseKabuExt + Send + Sync + Clone + Default + 'static,
26        LDT: KabuDataTypes,
27    > Strategy<DB, LDT>
28{
29    pub fn new() -> Self {
30        let compose_channel: Broadcaster<MessageSwapCompose<DB, LDT>> = Broadcaster::new(100);
31        let state_update_channel: Broadcaster<StateUpdateEvent<DB, LDT>> = Broadcaster::new(100);
32        Strategy { swap_compose_channel: compose_channel, state_update_channel }
33    }
34}
35
36impl<DB: Send + Sync + Clone + 'static, LDT: KabuDataTypes> Strategy<DB, LDT> {
37    pub fn swap_compose_channel(&self) -> Broadcaster<MessageSwapCompose<DB, LDT>> {
38        self.swap_compose_channel.clone()
39    }
40
41    pub fn state_update_channel(&self) -> Broadcaster<StateUpdateEvent<DB, LDT>> {
42        self.state_update_channel.clone()
43    }
44}