br_addon/
tools.rs

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