ankurah_core/
subscription.rs1use crate::{changes::ChangeSet, model::Entity, node::TNodeErased};
2use ankurah_proto as proto;
3use std::sync::{Arc, Mutex};
4
5pub type Callback<R> = Box<dyn Fn(ChangeSet<R>) + Send + Sync + 'static>;
7
8pub struct Subscription<R: Clone> {
10 #[allow(unused)]
11 pub(crate) id: proto::SubscriptionId,
12 pub(crate) collection_id: proto::CollectionId,
13 pub(crate) predicate: ankql::ast::Predicate,
14 pub(crate) callback: Arc<Callback<R>>,
15 pub(crate) matching_entities: Mutex<Vec<Arc<Entity>>>,
18}
19
20pub struct SubscriptionHandle {
22 pub(crate) id: proto::SubscriptionId,
23 pub(crate) node: Box<dyn TNodeErased>,
24 pub(crate) peers: Vec<proto::NodeId>,
25}
26
27impl SubscriptionHandle {
28 pub fn new(node: Box<dyn TNodeErased>, id: proto::SubscriptionId) -> Self { Self { id, node, peers: Vec::new() } }
29}
30
31impl Drop for SubscriptionHandle {
32 fn drop(&mut self) { self.node.unsubscribe(self); }
33}