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