1use std::env;
7
8#[derive(Debug, Clone)]
9pub struct Config {
10 pub app_name: String,
11 pub app_port: u16,
12 pub app_host: String,
13 pub app_key: String,
14 pub app_debug: bool,
15 pub app_url: String,
16 pub app_timezone: String,
17 pub app_limit_request: u64,
18
19 pub db_connection: String,
21 pub db_host: String,
22 pub db_port: u16,
23 pub db_database: String,
24 pub db_username: String,
25 pub db_password: String,
26
27 pub session_driver: String,
29
30 pub mail_host: String,
32 pub mail_port: u16,
33 pub mail_username: String,
34 pub mail_password: String,
35 pub mail_from_address: String,
36 pub mail_from_name: String,
37}
38
39impl Config {
40 pub fn load() -> Self {
41 Self {
42 app_name: env::var("APP_NAME").unwrap_or_else(|_| "RustBasic".to_string()),
43 app_port: env::var("APP_PORT")
44 .unwrap_or_else(|_| "4000".to_string())
45 .parse()
46 .expect("APP_PORT harus berupa angka"),
47 app_host: env::var("APP_HOST").unwrap_or_else(|_| "0.0.0.0".to_string()),
48 app_key: {
49 let key = env::var("APP_KEY").unwrap_or_default();
50 if key.is_empty() {
51 eprintln!("\nā Error: APP_KEY belum dikonfigurasi di file .env!");
52 eprintln!("š” Silakan jalankan perintah berikut untuk membuat key baru:");
53 eprintln!(" cargo rustbasic key:generate\n");
54 std::process::exit(1);
55 }
56 key
57 },
58 app_debug: env::var("APP_DEBUG").unwrap_or_else(|_| "false".to_string()).parse().unwrap_or(false),
59 app_url: env::var("APP_URL").unwrap_or_else(|_| "http://localhost:4000".to_string()),
60 app_timezone: env::var("APP_TIMEZONE").unwrap_or_else(|_| "UTC".to_string()),
61 app_limit_request: env::var("APP_LIMIT_REQUEST")
62 .unwrap_or_else(|_| "20".to_string())
63 .parse()
64 .expect("APP_LIMIT_REQUEST harus berupa angka"),
65
66 db_connection: env::var("DB_CONNECTION").unwrap_or_else(|_| "sqlite".to_string()),
68 db_host: env::var("DB_HOST").unwrap_or_else(|_| "127.0.0.1".to_string()),
69 db_port: env::var("DB_PORT")
70 .unwrap_or_else(|_| "3306".to_string())
71 .parse()
72 .expect("DB_PORT harus berupa angka"),
73 db_database: env::var("DB_DATABASE").unwrap_or_else(|_| "rustbasic".to_string()),
74 db_username: env::var("DB_USERNAME").unwrap_or_else(|_| "root".to_string()),
75 db_password: env::var("DB_PASSWORD").unwrap_or_default(),
76
77 session_driver: env::var("SESSION_DRIVER").unwrap_or_else(|_| "database".to_string()),
79
80 mail_host: env::var("MAIL_HOST").unwrap_or_else(|_| "smtp.mailtrap.io".to_string()),
82 mail_port: env::var("MAIL_PORT")
83 .unwrap_or_else(|_| "2525".to_string())
84 .parse()
85 .expect("MAIL_PORT harus berupa angka"),
86 mail_username: env::var("MAIL_USERNAME").unwrap_or_else(|_| "null".to_string()),
87 mail_password: env::var("MAIL_PASSWORD").unwrap_or_else(|_| "null".to_string()),
88 mail_from_address: env::var("MAIL_FROM_ADDRESS").unwrap_or_else(|_| "hello@example.com".to_string()),
89 mail_from_name: env::var("MAIL_FROM_NAME").unwrap_or_else(|_| "RustBasic".to_string()),
90 }
91 }
92
93 #[allow(dead_code)]
94 pub fn db_backend(&self) -> sea_orm::DbBackend {
95 if self.db_connection == "mysql" {
96 sea_orm::DbBackend::MySql
97 } else {
98 sea_orm::DbBackend::Sqlite
99 }
100 }
101}