barreleye_indexer/
lib.rs

1use eyre::Result;
2use serde_json::Value as JsonValue;
3use tokio::sync::{
4	broadcast,
5	mpsc::{self, Sender},
6};
7
8use barreleye_common::{chain::WarehouseData, models::ConfigKey};
9pub use indexer::Indexer;
10pub use lists::Lists;
11
12mod indexer;
13mod lists;
14
15pub struct Pipe {
16	config_key: ConfigKey,
17	sender: Sender<(ConfigKey, JsonValue, WarehouseData)>,
18	receipt: mpsc::Receiver<()>,
19	pub abort: broadcast::Receiver<()>,
20}
21
22impl Pipe {
23	pub fn new(
24		config_key: ConfigKey,
25		sender: Sender<(ConfigKey, JsonValue, WarehouseData)>,
26		receipt: mpsc::Receiver<()>,
27		abort: broadcast::Receiver<()>,
28	) -> Self {
29		Self { config_key, sender, receipt, abort }
30	}
31
32	pub async fn push(
33		&mut self,
34		config_value: JsonValue,
35		warehouse_data: WarehouseData,
36	) -> Result<()> {
37		self.sender.send((self.config_key, config_value, warehouse_data)).await?;
38
39		tokio::select! {
40			_ = self.receipt.recv() => {}
41			_ = self.abort.recv() => {}
42		}
43
44		Ok(())
45	}
46}