ankurah_core/
subscription.rsuse crate::{changes::ChangeSet, model::Entity};
use ankurah_proto as proto;
use std::sync::{Arc, Mutex};
pub type Callback<R> = Box<dyn Fn(ChangeSet<R>) + Send + Sync + 'static>;
pub struct Subscription<R: Clone> {
#[allow(unused)]
pub(crate) id: proto::SubscriptionId,
pub(crate) collection_id: proto::CollectionId,
pub(crate) predicate: ankql::ast::Predicate,
pub(crate) callback: Arc<Callback<R>>,
pub(crate) matching_entities: Mutex<Vec<Arc<Entity>>>,
}
pub struct SubscriptionHandle {
pub(crate) id: proto::SubscriptionId,
pub(crate) reactor: Arc<crate::reactor::Reactor>,
}
impl SubscriptionHandle {
pub fn new(reactor: Arc<crate::reactor::Reactor>, id: proto::SubscriptionId) -> Self { Self { id, reactor } }
}
impl Drop for SubscriptionHandle {
fn drop(&mut self) { self.reactor.unsubscribe(self.id); }
}