Skip to main content

reifydb_sub_flow/subsystem/
factory.rs

1// SPDX-License-Identifier: Apache-2.0
2// Copyright (c) 2026 ReifyDB
3
4use reifydb_core::util::ioc::IocContainer;
5use reifydb_engine::engine::StandardEngine;
6use reifydb_sub_api::subsystem::{Subsystem, SubsystemFactory};
7use reifydb_transaction::interceptor::builder::InterceptorBuilder;
8use reifydb_value::Result;
9
10use super::FlowSubsystem;
11use crate::builder::{FlowConfig, FlowConfigurator};
12
13pub struct FlowSubsystemFactory {
14	config: FlowConfig,
15}
16
17impl FlowSubsystemFactory {
18	pub fn new() -> Self {
19		Self {
20			config: FlowConfigurator::new().configure(),
21		}
22	}
23
24	pub fn with_configurator<F>(configurator: F) -> Self
25	where
26		F: FnOnce(FlowConfigurator) -> FlowConfigurator + Send + 'static,
27	{
28		Self {
29			config: configurator(FlowConfigurator::new()).configure(),
30		}
31	}
32}
33
34impl Default for FlowSubsystemFactory {
35	fn default() -> Self {
36		Self::new()
37	}
38}
39
40impl SubsystemFactory for FlowSubsystemFactory {
41	fn provide_interceptors(&self, builder: InterceptorBuilder, _ioc: &IocContainer) -> InterceptorBuilder {
42		builder
43	}
44
45	fn publish_catalog(&self, ioc: &IocContainer) -> Result<()> {
46		let engine = ioc.resolve::<StandardEngine>()?;
47		FlowSubsystem::publish_operator_catalog(&self.config, &engine);
48		Ok(())
49	}
50
51	fn create(self: Box<Self>, ioc: &IocContainer) -> Result<Box<dyn Subsystem>> {
52		let engine = ioc.resolve::<StandardEngine>()?;
53		Ok(Box::new(FlowSubsystem::new(self.config, engine, ioc)?))
54	}
55}