Skip to main content

reifydb_engine/
subscription.rs

1// SPDX-License-Identifier: Apache-2.0
2// Copyright (c) 2025 ReifyDB
3
4//! Subscription service trait for IoC-based integration.
5//!
6//! The engine defines this trait so DDL code can manage subscriptions
7//! without a compile-time dependency on the subscription subsystem crate.
8//! The subsystem implements this trait and registers it in IoC.
9
10use std::sync::Arc;
11
12use reifydb_core::interface::catalog::id::SubscriptionId;
13use reifydb_rql::flow::flow::FlowDag;
14use reifydb_transaction::transaction::Transaction;
15use reifydb_type::Result;
16
17/// Service interface for managing ephemeral subscriptions.
18///
19/// Implemented by `reifydb-sub-subscription` and registered in IoC as
20/// `Arc<dyn SubscriptionService>`. The engine's DDL code resolves this
21/// to create and drop subscriptions.
22pub trait SubscriptionService: Send + Sync {
23	/// Generate a new unique subscription ID.
24	fn next_id(&self) -> SubscriptionId;
25
26	/// Register a subscription with a pre-compiled flow DAG.
27	fn register_subscription(
28		&self,
29		id: SubscriptionId,
30		flow_dag: FlowDag,
31		column_names: Vec<String>,
32		txn: &mut Transaction<'_>,
33	) -> Result<()>;
34
35	/// Unregister a subscription.
36	fn unregister_subscription(&self, id: &SubscriptionId) -> Result<()>;
37}
38
39/// Convenience type alias for IoC registration.
40pub type SubscriptionServiceRef = Arc<dyn SubscriptionService>;