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;
11use json::JsonValue;
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", feature = "pgsql"))]
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", feature = "pgsql"))]
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", feature = "pgsql"))]
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", feature = "pgsql"))]
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 #[cfg(any(feature = "mysql", feature = "mssql", feature = "sqlite", feature = "pgsql"))]
68 pub fn set_db_connection(&mut self, name: &str, connection: JsonValue) {
70 self.db.set_connection(name, connection);
71 }
72 #[cfg(any(feature = "mysql", feature = "mssql", feature = "sqlite", feature = "pgsql"))]
73 pub fn set_db_default(&mut self, name: &str) {
75 self.db.set_default(name);
76 }
77}