reifydb_sub_server_admin/
factory.rs1use 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
14pub struct AdminSubsystemFactory {
16 config: AdminConfig,
17}
18
19impl AdminSubsystemFactory {
20 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 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}