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#[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}