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 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}