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};
10
11use crate::{config::AdminConfig, state::AdminState, subsystem::AdminSubsystem};
12
13pub struct AdminSubsystemFactory {
15 config: AdminConfig,
16}
17
18impl AdminSubsystemFactory {
19 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 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}