Skip to main content

reifydb_engine/
subscription.rs

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