Skip to main content

reifydb_core/interface/catalog/
subscription.rs

1// SPDX-License-Identifier: Apache-2.0
2// Copyright (c) 2026 ReifyDB
3
4use 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}