sz_rust_sdk/core/
config_manager.rs1use crate::{
4 error::SzResult,
5 ffi_call_config_mgr, process_config_mgr_long_result, process_config_mgr_result,
6 traits::{SzConfig, SzConfigManager},
7 types::{ConfigId, JsonString},
8};
9
10pub struct SzConfigManagerCore;
15
16impl SzConfigManagerCore {
17 pub(crate) fn new() -> SzResult<Self> {
20 Ok(Self)
21 }
22}
23
24impl SzConfigManager for SzConfigManagerCore {
25 fn create_config(&self) -> SzResult<Box<dyn SzConfig>> {
26 match super::environment::SzEnvironmentCore::get_existing_instance() {
27 Ok(existing_env) => {
28 let config_core = super::config::SzConfigCore::new_with_params(
29 "SzRustSDK-Config",
30 existing_env.get_ini_params(),
31 existing_env.get_verbose_logging(),
32 )?;
33 Ok(Box::new(config_core))
34 }
35 Err(e) => Err(crate::error::SzError::configuration(format!(
36 "Cannot create config without initialized environment: {e}"
37 ))),
38 }
39 }
40
41 fn create_config_from_id(&self, config_id: ConfigId) -> SzResult<Box<dyn SzConfig>> {
42 let result = unsafe { crate::ffi::SzConfigMgr_getConfig_helper(config_id) };
43 let config_definition = process_config_mgr_result!(result)?;
44
45 let config_core = super::config::SzConfigCore::new_with_definition(&config_definition)?;
46 Ok(Box::new(config_core))
47 }
48
49 fn create_config_from_definition(
50 &self,
51 config_definition: &str,
52 ) -> SzResult<Box<dyn SzConfig>> {
53 let config_core = super::config::SzConfigCore::new_with_definition(config_definition)?;
54 Ok(Box::new(config_core))
55 }
56
57 fn get_config_registry(&self) -> SzResult<JsonString> {
58 let result = unsafe { crate::ffi::SzConfigMgr_getConfigRegistry_helper() };
59 process_config_mgr_result!(result)
60 }
61
62 fn get_default_config_id(&self) -> SzResult<ConfigId> {
63 let result = unsafe { crate::ffi::SzConfigMgr_getDefaultConfigID_helper() };
64 process_config_mgr_long_result!(result)
65 }
66
67 fn register_config(
68 &self,
69 config_definition: &str,
70 config_comment: Option<&str>,
71 ) -> SzResult<ConfigId> {
72 let config_def_c = crate::ffi::helpers::str_to_c_string(config_definition)?;
73 let comment_c = crate::ffi::helpers::str_to_c_string(config_comment.unwrap_or(""))?;
74
75 let result = unsafe {
76 crate::ffi::SzConfigMgr_registerConfig_helper(config_def_c.as_ptr(), comment_c.as_ptr())
77 };
78
79 process_config_mgr_long_result!(result)
80 }
81
82 fn replace_default_config_id(
83 &self,
84 current_default_config_id: ConfigId,
85 new_default_config_id: ConfigId,
86 ) -> SzResult<()> {
87 ffi_call_config_mgr!(crate::ffi::SzConfigMgr_replaceDefaultConfigID(
88 current_default_config_id,
89 new_default_config_id
90 ));
91 Ok(())
92 }
93
94 fn set_default_config(
95 &self,
96 config_definition: &str,
97 config_comment: Option<&str>,
98 ) -> SzResult<ConfigId> {
99 let config_id = self.register_config(config_definition, config_comment)?;
100 self.set_default_config_id(config_id)?;
101 Ok(config_id)
102 }
103
104 fn set_default_config_id(&self, config_id: ConfigId) -> SzResult<()> {
105 ffi_call_config_mgr!(crate::ffi::SzConfigMgr_setDefaultConfigID(config_id));
106 Ok(())
107 }
108}