Skip to main content

reifydb_sub_server_admin/
factory.rs

1// SPDX-License-Identifier: AGPL-3.0-or-later
2// Copyright (c) 2025 ReifyDB
3
4//! Factory for creating admin subsystem instances.
5
6use reifydb_core::util::ioc::IocContainer;
7use reifydb_engine::engine::StandardEngine;
8use reifydb_runtime::SharedRuntime;
9use reifydb_sub_api::subsystem::{Subsystem, SubsystemFactory};
10
11use crate::{config::AdminConfig, state::AdminState, subsystem::AdminSubsystem};
12
13/// Factory for creating admin subsystem instances.
14pub struct AdminSubsystemFactory {
15	config: AdminConfig,
16}
17
18impl AdminSubsystemFactory {
19	/// Create a new admin subsystem factory with the given configuration.
20	pub fn new(config: AdminConfig) -> Self {
21		Self {
22			config,
23		}
24	}
25}
26
27impl SubsystemFactory for AdminSubsystemFactory {
28	fn create(self: Box<Self>, ioc: &IocContainer) -> reifydb_type::Result<Box<dyn Subsystem>> {
29		let engine = ioc.resolve::<StandardEngine>()?;
30		let ioc_runtime = ioc.resolve::<SharedRuntime>()?;
31
32		// Create admin state from config
33		let state = AdminState::new(
34			engine,
35			self.config.max_connections,
36			self.config.request_timeout,
37			self.config.auth_required,
38			self.config.auth_token.clone(),
39		);
40
41		let subsystem = AdminSubsystem::new(
42			self.config.bind_addr.clone(),
43			state,
44			self.config.runtime.unwrap_or(ioc_runtime),
45		);
46
47		Ok(Box::new(subsystem))
48	}
49}