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