hashtree_network/
relay_bridge.rs1use anyhow::Result;
2use async_trait::async_trait;
3use nostr_sdk::nostr::{ClientMessage, Event, Filter, SubscriptionId};
4use std::sync::Arc;
5use tokio::sync::mpsc;
6
7#[async_trait]
8pub trait MeshEventStore: Send + Sync {
9 async fn ingest_trusted_event(&self, event: Event) -> Result<()>;
10
11 async fn query_events(&self, filter: &Filter, limit: usize) -> Vec<Event>;
12}
13
14pub type SharedMeshEventStore = Arc<dyn MeshEventStore>;
15
16#[async_trait]
17pub trait MeshRelayClient: MeshEventStore {
18 fn next_client_id(&self) -> u64;
19
20 async fn register_client(
21 &self,
22 client_id: u64,
23 sender: mpsc::UnboundedSender<String>,
24 pubkey: Option<String>,
25 );
26
27 async fn unregister_client(&self, client_id: u64);
28
29 async fn handle_client_message(&self, client_id: u64, msg: ClientMessage);
30
31 async fn register_subscription_query(
32 &self,
33 client_id: u64,
34 subscription_id: SubscriptionId,
35 filters: Vec<Filter>,
36 ) -> std::result::Result<Vec<Event>, &'static str>;
37
38 async fn ingest_trusted_event_from_peer(
39 &self,
40 event: Event,
41 _peer_id: Option<String>,
42 ) -> Result<()> {
43 self.ingest_trusted_event(event).await
44 }
45}
46
47pub type SharedMeshRelayClient = Arc<dyn MeshRelayClient>;