reifydb-sub-task 0.6.0

Task execution subsystem for ReifyDB
Documentation
// SPDX-License-Identifier: AGPL-3.0-or-later
// Copyright (c) 2026 ReifyDB

use reifydb_core::util::ioc::IocContainer;
use reifydb_sub_api::subsystem::{Subsystem, SubsystemFactory};
use reifydb_transaction::interceptor::builder::InterceptorBuilder;
use reifydb_value::Result;

use crate::{subsystem::TaskSubsystem, task::ScheduledTask};

#[derive(Default)]
pub struct TaskConfig {
	tasks: Vec<ScheduledTask>,
}

impl TaskConfig {
	pub fn new(tasks: Vec<ScheduledTask>) -> Self {
		Self {
			tasks,
		}
	}
}

pub struct TaskSubsystemFactory {
	config: TaskConfig,
}

impl TaskSubsystemFactory {
	pub fn new() -> Self {
		Self {
			config: TaskConfig::default(),
		}
	}

	pub fn with_config(config: TaskConfig) -> Self {
		Self {
			config,
		}
	}
}

impl Default for TaskSubsystemFactory {
	fn default() -> Self {
		Self::new()
	}
}

impl SubsystemFactory for TaskSubsystemFactory {
	fn provide_interceptors(&self, builder: InterceptorBuilder, _ioc: &IocContainer) -> InterceptorBuilder {
		builder
	}

	fn create(self: Box<Self>, ioc: &IocContainer) -> Result<Box<dyn Subsystem>> {
		Ok(Box::new(TaskSubsystem::new(ioc, self.config.tasks)))
	}
}