reifydb-core 0.4.12

Core database interfaces and data structures for ReifyDB
Documentation
// SPDX-License-Identifier: Apache-2.0
// Copyright (c) 2025 ReifyDB

use std::sync::Arc;

use crate::{interface::catalog::id::SubscriptionId, value::column::columns::Columns};

/// Implicit column names for subscriptions
pub const IMPLICIT_COLUMN_OP: &str = "_op";

/// Type-erased interface for inspecting subscription data.
///
/// Implemented by the subscription subsystem and registered in IoC as
/// `Arc<dyn SubscriptionInspector>`. Used by the `inspect_subscription`
/// generator function in the routine crate without depending on the
/// subscription subsystem crate.
pub trait SubscriptionInspector: Send + Sync {
	/// Drain all available rows from a subscription's buffer,
	/// merged into a single Columns result.
	fn inspect(&self, id: SubscriptionId) -> Option<Columns>;

	/// Return the IDs of all currently active subscriptions.
	fn active_subscriptions(&self) -> Vec<SubscriptionId>;

	/// Return the number of columns in a subscription's schema.
	fn column_count(&self, id: &SubscriptionId) -> Option<usize>;
}

/// Convenience type alias for IoC registration.
pub type SubscriptionInspectorRef = Arc<dyn SubscriptionInspector>;