br_addon/
tools.rs

1#[cfg(feature = "cache")]
2use br_cache::{Cache, Config as CacheConfig};
3#[cfg(any(feature = "mysql", feature = "mssql", feature = "sqlite"))]
4use br_db::config::Config as DbConfig;
5#[cfg(any(feature = "mysql", feature = "mssql", feature = "sqlite"))]
6use br_db::Db;
7#[cfg(feature = "kafka")]
8use br_kafka::Config as KafkaConfig;
9
10#[cfg(feature = "kafka")]
11use br_kafka::Kafka;
12use serde::Deserialize;
13use std::path::PathBuf;
14#[cfg(feature = "email")]
15use br_email::Mail;
16#[cfg(feature = "email")]
17use br_email::Config as EmailConfig;
18
19
20/// 配置文件
21#[derive(Clone)]
22pub struct Tools {
23    #[cfg(any(feature = "mysql", feature = "mssql", feature = "sqlite"))]
24    pub db: Db,
25    #[cfg(feature = "cache")]
26    pub cache: Cache,
27    #[cfg(feature = "kafka")]
28    pub kafka: Kafka,
29    #[cfg(feature = "email")]
30    pub email: Mail,
31}
32impl Tools {
33    pub fn new(config: ToolsConfig) -> Result<Self, String> {
34        Ok(Self {
35            #[cfg(any(feature = "mysql", feature = "mssql", feature = "sqlite"))]
36            db: Db::new(config.db)?,
37            #[cfg(feature = "cache")]
38            cache: Cache::new(config.cache)?,
39            #[cfg(feature = "kafka")]
40            kafka: Kafka::new(config.kafka)?,
41            #[cfg(feature = "email")]
42            email: Mail::new_new(config.email)?,
43        })
44    }
45}
46#[derive(Clone, Debug, Deserialize)]
47pub struct ToolsConfig {
48    #[cfg(any(feature = "mysql", feature = "mssql", feature = "sqlite"))]
49    pub db: DbConfig,
50    #[cfg(feature = "cache")]
51    pub cache: CacheConfig,
52    #[cfg(feature = "kafka")]
53    pub kafka: KafkaConfig,
54    #[cfg(feature = "email")]
55    pub email: EmailConfig,
56}
57impl ToolsConfig {
58    pub fn create(config_file: PathBuf) -> Self {
59        Self {
60            #[cfg(any(feature = "mysql", feature = "mssql", feature = "sqlite"))]
61            db: DbConfig::create(config_file.clone(), true),
62            #[cfg(feature = "cache")]
63            cache: CacheConfig::create(config_file.clone(), true),
64            #[cfg(feature = "kafka")]
65            kafka: KafkaConfig::create(config_file.clone(), true),
66            #[cfg(feature = "kafka")]
67            email: EmailConfig::create(config_file.clone(), true),
68        }
69    }
70}