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