reifydb_core/interface/catalog/
subscription.rs1use std::sync::Arc;
5
6use arrow_array::RecordBatch;
7use reifydb_value::{Result, value::duration::Duration};
8
9use crate::interface::catalog::id::SubscriptionId;
10
11pub trait SubscriptionInspector: Send + Sync {
12 fn inspect(&self, id: SubscriptionId) -> Result<Option<RecordBatch>>;
13
14 fn active_subscriptions(&self) -> Vec<SubscriptionId>;
15}
16
17pub type SubscriptionInspectorRef = Arc<dyn SubscriptionInspector>;
18
19#[derive(Debug, Clone, PartialEq, Eq)]
20pub struct HydrationConfig {
21 pub enabled: bool,
22 pub max_rows: Option<u64>,
23}
24
25impl Default for HydrationConfig {
26 fn default() -> Self {
27 Self {
28 enabled: true,
29 max_rows: None,
30 }
31 }
32}
33
34#[derive(Debug, Clone, Default)]
35pub struct SubscribeOptions {
36 pub hydration: HydrationConfig,
37 pub throttle: Option<Duration>,
38 pub linger: Option<Duration>,
39}
40
41pub enum SubscribeOutcome {
42 Local {
43 id: SubscriptionId,
44 },
45 Remote {
46 address: String,
47 body: String,
48 token: Option<String>,
49 },
50}