Skip to main content

reifydb_sub_task/
factory.rs

1// SPDX-License-Identifier: AGPL-3.0-or-later
2// Copyright (c) 2026 ReifyDB
3
4use reifydb_core::util::ioc::IocContainer;
5use reifydb_sub_api::subsystem::{Subsystem, SubsystemFactory};
6use reifydb_transaction::interceptor::builder::InterceptorBuilder;
7use reifydb_value::Result;
8
9use crate::{subsystem::TaskSubsystem, task::ScheduledTask};
10
11#[derive(Default)]
12pub struct TaskConfig {
13	tasks: Vec<ScheduledTask>,
14}
15
16impl TaskConfig {
17	pub fn new(tasks: Vec<ScheduledTask>) -> Self {
18		Self {
19			tasks,
20		}
21	}
22}
23
24pub struct TaskSubsystemFactory {
25	config: TaskConfig,
26}
27
28impl TaskSubsystemFactory {
29	pub fn new() -> Self {
30		Self {
31			config: TaskConfig::default(),
32		}
33	}
34
35	pub fn with_config(config: TaskConfig) -> Self {
36		Self {
37			config,
38		}
39	}
40}
41
42impl Default for TaskSubsystemFactory {
43	fn default() -> Self {
44		Self::new()
45	}
46}
47
48impl SubsystemFactory for TaskSubsystemFactory {
49	fn provide_interceptors(&self, builder: InterceptorBuilder, _ioc: &IocContainer) -> InterceptorBuilder {
50		builder
51	}
52
53	fn create(self: Box<Self>, ioc: &IocContainer) -> Result<Box<dyn Subsystem>> {
54		Ok(Box::new(TaskSubsystem::new(ioc, self.config.tasks)))
55	}
56}