pub mod actor; /// event 与平台共用同一个 Redis 连接配置类型(`cache` 连接池的入参)。 pub mod redis { pub use crate::redis::{RedisConfig, RedisMode}; } pub mod consumer; pub mod platform; pub mod rpc; pub mod socket; use serde::{Deserialize, Serialize}; use crate::ConfigError; use crate::redis::RedisConfig; use actor::ActorConfig; use consumer::RocketMqConsumerConfig; use platform::PlatformClientConfig; use rpc::RpcConfig; use socket::SocketConfig; /// event 子命令的完整配置。 /// /// 只包含实时通道自身需要的五类参数:socket 通道、actor/心跳、订阅用 Redis、 /// RocketMQ 消费、内部 RPC;不读取数据库/S3/业务域 section。 #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(default)] pub struct EventConfig { pub socket: SocketConfig, pub actor: ActorConfig, pub redis: RedisConfig, pub consumer: RocketMqConsumerConfig, pub rpc: RpcConfig, pub platform: PlatformClientConfig, } impl EventConfig { pub fn load() -> Result { let figment = crate::loader::figment()?; let config: Self = figment.extract_inner("event").map_err(ConfigError::from)?; config.validate().map_err(ConfigError::Validation)?; Ok(config) } pub fn validate(&self) -> Result<(), String> { self.socket.validate()?; self.actor.validate()?; self.redis.validate()?; self.consumer.validate()?; self.rpc.validate()?; self.platform.validate()?; Ok(()) } }