use super::{LiveRowsConfig, LiveRowsEvent, LiveRowsMaterializer, SubscriptionManager};
use crate::error::Result;
pub struct LiveRowsSubscription {
inner: SubscriptionManager,
materializer: LiveRowsMaterializer,
}
impl LiveRowsSubscription {
pub(crate) fn new(inner: SubscriptionManager, config: LiveRowsConfig) -> Self {
Self {
inner,
materializer: LiveRowsMaterializer::new(config),
}
}
pub async fn next(&mut self) -> Option<Result<LiveRowsEvent>> {
loop {
let event = self.inner.next().await?;
match event {
Ok(change) => {
if let Some(update) = self.materializer.apply(change) {
return Some(Ok(update));
}
},
Err(error) => return Some(Err(error)),
}
}
}
pub async fn close(&mut self) -> Result<()> {
self.inner.close().await
}
pub fn subscription_id(&self) -> &str {
self.inner.subscription_id()
}
}