reifydb_core/interface/catalog/subscription.rs
1// SPDX-License-Identifier: Apache-2.0
2// Copyright (c) 2025 ReifyDB
3
4use std::sync::Arc;
5
6use crate::{interface::catalog::id::SubscriptionId, value::column::columns::Columns};
7
8/// Implicit column names for subscriptions
9pub const IMPLICIT_COLUMN_OP: &str = "_op";
10
11/// Type-erased interface for inspecting subscription data.
12///
13/// Implemented by the subscription subsystem and registered in IoC as
14/// `Arc<dyn SubscriptionInspector>`. Used by the `subscription::inspect`
15/// generator procedure in the routine crate without depending on the
16/// subscription subsystem crate.
17pub trait SubscriptionInspector: Send + Sync {
18 /// Drain all available rows from a subscription's buffer,
19 /// merged into a single Columns result.
20 fn inspect(&self, id: SubscriptionId) -> Option<Columns>;
21
22 /// Return the IDs of all currently active subscriptions.
23 fn active_subscriptions(&self) -> Vec<SubscriptionId>;
24
25 /// Return the number of columns in a subscription's schema.
26 fn column_count(&self, id: &SubscriptionId) -> Option<usize>;
27}
28
29/// Convenience type alias for IoC registration.
30pub type SubscriptionInspectorRef = Arc<dyn SubscriptionInspector>;