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
15#[derive(Clone)]
17pub struct Tools {
18 #[cfg(any(feature = "mysql", feature = "mssql", feature = "sqlite"))]
19 pub db: Db,
20 #[cfg(feature = "cache")]
21 pub cache: Cache,
22 #[cfg(feature = "kafka")]
23 pub kafka: Kafka,
24}
25impl Tools {
26 pub fn new(config: ToolsConfig) -> Result<Self, String> {
27 Ok(Self {
28 #[cfg(any(feature = "mysql", feature = "mssql", feature = "sqlite"))]
29 db: Db::new(config.db)?,
30 #[cfg(feature = "cache")]
31 cache: Cache::new(config.cache)?,
32 #[cfg(feature = "kafka")]
33 kafka: Kafka::new(config.kafka)?,
34 })
35 }
36}
37#[derive(Clone, Debug, Deserialize)]
38pub struct ToolsConfig {
39 #[cfg(any(feature = "mysql", feature = "mssql", feature = "sqlite"))]
40 pub db: DbConfig,
41 #[cfg(feature = "cache")]
42 pub cache: CacheConfig,
43 #[cfg(feature = "kafka")]
44 pub kafka: KafkaConfig,
45}
46impl ToolsConfig {
47 pub fn create(config_file: PathBuf) -> Self {
48 Self {
49 #[cfg(any(feature = "mysql", feature = "mssql", feature = "sqlite"))]
50 db: DbConfig::create(config_file.clone(), true),
51 #[cfg(feature = "cache")]
52 cache: CacheConfig::create(config_file.clone(), true),
53 #[cfg(feature = "kafka")]
54 kafka: KafkaConfig::create(config_file.clone(), true),
55 }
56 }
57}