89 lines
2.8 KiB
Rust
89 lines
2.8 KiB
Rust
use serde::Deserialize;
|
|
use std::path::Path;
|
|
|
|
const DEFAULT_CONFIG_PATH: &str = "config.toml";
|
|
const DEFAULT_SECRET_CONFIG_PATH: &str = "secret-config.toml";
|
|
|
|
#[derive(Debug, Clone, Deserialize)]
|
|
struct PublicConfig {
|
|
pub postgres_host: String,
|
|
pub pg_database: String,
|
|
pub postgres_user: String,
|
|
pub file_storage: String,
|
|
pub dedicated_ai_server_address: String,
|
|
pub dedicated_ai_server_port: u16,
|
|
}
|
|
|
|
#[derive(Debug, Clone, Deserialize)]
|
|
struct SecretConfig {
|
|
pub dedicated_ai_server_secret: String,
|
|
}
|
|
|
|
#[derive(Debug, Clone, Deserialize)]
|
|
pub struct GeneralServiceConfig {
|
|
pub postgres_host: String,
|
|
pub pg_database: String,
|
|
pub postgres_user: String,
|
|
pub file_storage: String,
|
|
pub dedicated_ai_server_address: String,
|
|
pub dedicated_ai_server_port: u16,
|
|
pub dedicated_ai_server_secret: String,
|
|
}
|
|
|
|
pub type ConfigResult<T> = Result<T, Box<dyn std::error::Error>>;
|
|
|
|
pub fn load_config(config_path: impl AsRef<Path>, secret_config_path: impl AsRef<Path>) -> ConfigResult<GeneralServiceConfig> {
|
|
let raw_config = std::fs::read_to_string(config_path.as_ref())?;
|
|
let public_config: PublicConfig = toml::from_str(&raw_config)?;
|
|
let raw_secret = std::fs::read_to_string(secret_config_path.as_ref())?;
|
|
let secret_config: SecretConfig = toml::from_str(&raw_secret)?;
|
|
|
|
let config = GeneralServiceConfig {
|
|
postgres_host: public_config.postgres_host,
|
|
pg_database: public_config.pg_database,
|
|
postgres_user: public_config.postgres_user,
|
|
file_storage: public_config.file_storage,
|
|
dedicated_ai_server_address: public_config.dedicated_ai_server_address,
|
|
dedicated_ai_server_port: public_config.dedicated_ai_server_port,
|
|
dedicated_ai_server_secret: secret_config.dedicated_ai_server_secret,
|
|
};
|
|
|
|
if config.pg_database.trim().is_empty() {
|
|
return Err(std::io::Error::new(
|
|
std::io::ErrorKind::InvalidData,
|
|
"config database is empty",
|
|
)
|
|
.into());
|
|
}
|
|
|
|
if config.postgres_user.trim().is_empty() {
|
|
return Err(std::io::Error::new(
|
|
std::io::ErrorKind::InvalidData,
|
|
"config user is empty",
|
|
)
|
|
.into());
|
|
}
|
|
|
|
if config.file_storage.trim().is_empty() {
|
|
return Err(std::io::Error::new(
|
|
std::io::ErrorKind::InvalidData,
|
|
"config file_storage is empty",
|
|
)
|
|
.into());
|
|
}
|
|
|
|
if config.dedicated_ai_server_secret.trim().is_empty() {
|
|
return Err(std::io::Error::new(
|
|
std::io::ErrorKind::InvalidData,
|
|
"config dedicated_ai_server_secret is empty",
|
|
)
|
|
.into());
|
|
}
|
|
|
|
Ok(config)
|
|
}
|
|
|
|
pub fn load_config_default() -> ConfigResult<GeneralServiceConfig> {
|
|
load_config(DEFAULT_CONFIG_PATH, DEFAULT_SECRET_CONFIG_PATH)
|
|
}
|