
https://gitee.com/leijmdas/ruwebframe.git master 基础 pub fn parse_objectT: DeserializeOwned(self, key: str) -T { let ssself.config_values.lock().unwrap().get(key).unwrap().clone() ; let strujsonutils::json2struct::T(jsonutils::struct2json(ss ).unwrap().as_str()); stru.unwrap() }pub fn parse_config(mut self) { let envConf self.get_config_path(self.parse_env2file()); let file File::open(envConf); let mut read BufReader::new(file.unwrap()); let mut yaml_str String::new(); read.read_to_string(mut yaml_str).unwrap(); yaml_str str_utils::preprocess_placeholder_vars(yaml_str); *self.config_values.lock().unwrap() YamlParser.parse(yaml_str).unwrap();扩展#[derive(Debug)] pub struct TestConf { pub conf: RuConfig, } impl TestConf { pub fn new() - TestConf { let mut cTestConf { conf: RuConfig::new(), }; c.init(); c } pub fn init(mut self) { self.conf.init(); } pub fn readNats(self) - NatsDto { self.conf.parse_object::NatsDto(nats) } }配置nats: url: ${NATS_URL:nats://192.168.1.153:14222} timeout: ${NATS_TIMEOUT:10} #s subscribe: topicSync: general_sync.* topicAsync: general_async.*测试#[test] fn test_14_conf() { let cfg TestConf::new(); rulog::info1(cfg.readNats() ); }结果NatsDto {url: nats://192.168.1.153:14222,timeout: 10,subscribe: SubscribeDto {topicSync: general_sync.*,topicAsync: general_async.*,},}标准版use std::ops::{Deref, DerefMut}; use serde::{Deserialize, Serialize}; use crate::rubase::BaseEntitySingle; use crate::rubase::rudto::confdto::natsdto::nats_dto::NatsDto; use crate::ruconf::RuConfig; #[derive(Debug, Clone,Deserialize,Serialize)] pub struct RunConfigExt { pub conf: RuConfig, } impl RunConfigExt { pub fn new() - RunConfigExt { let mut c RunConfigExt { conf: RuConfig::new(), }; c.init(); c } pub fn init(mut self) { self.conf.init(); } pub fn read_nats(self) - NatsDto { self.parse_object::NatsDto(nats) } } impl BaseEntitySingle for RunConfigExt {} impl Deref for RunConfigExt { type Target RuConfig; fn deref(self) - Self::Target { self.conf } } impl DerefMut for RunConfigExt { fn deref_mut(mut self) - mut Self::Target { mut self.conf } }// mod domain::ruextend::ru_config_ext /* Title 文件名称: run_config_ext_init.rs Desp 描述: 依赖自动注入 Company 公司: weicht.akunlong.top Author 作者: raymond163.com 时间: 2026-09-01 20:25:40 Update 作者: raymond163.com 时间: 2026-09-01 20:25:40 */ // StructInit自动生成一般不要手动修改 use std::sync::{Arc, Mutex}; use ctor::ctor; use crate::rubase::{BaseEntitySingle,BeanSingle}; use crate::domain::ruextend::ru_config_ext::RunConfigExt; #[ctor(unsafe)] pub fn init() { RunConfigExt::register_bean_singleton(); } pub fn find_bean_run_config_ext() - OptionArcRunConfigExt { RunConfigExt::find_bean() } impl BeanSingle for RunConfigExt { fn new_bean() - Self { let mut bean RunConfigExt::new(); bean.init(); bean } }// mod domain::ruextend::ru_config_ext use crate::rubase::BaseEntity; use crate::rudi::didto; use crate::rulog; #[cfg(test)] mod tests { use crate::domain::ruextend::find_bean_run_config_ext; use super::*; #[test] fn test_02_conf_ext_base() { let confExt find_bean_run_config_ext().unwrap(); rulog::info2(confExt ext:, confExt.read_nats()); rulog::info2(confExt base:, confExt.read_gorm()); } }