Skip to main content

reifydb_sub_server_admin/
factory.rs

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