2022-10-29 17:09:56 +00:00
|
|
|
use anyhow::{Context, Result};
|
2022-10-28 22:41:02 +00:00
|
|
|
use serde::Deserialize;
|
|
|
|
use std::env;
|
|
|
|
use std::fs::File;
|
|
|
|
use std::io::BufReader;
|
|
|
|
|
2022-11-01 23:24:17 +00:00
|
|
|
#[derive(Deserialize)]
|
|
|
|
pub struct SocketAddress {
|
|
|
|
pub address: [u8; 4],
|
|
|
|
pub port: u16,
|
|
|
|
}
|
|
|
|
|
2022-10-28 22:41:02 +00:00
|
|
|
#[derive(Deserialize)]
|
|
|
|
pub struct EmailServer {
|
|
|
|
pub server_name: String,
|
|
|
|
pub email: String,
|
|
|
|
pub password: String,
|
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(Deserialize)]
|
|
|
|
pub struct Address {
|
|
|
|
pub name: String,
|
|
|
|
pub user: String,
|
|
|
|
pub domain: String,
|
|
|
|
}
|
|
|
|
|
2022-11-01 23:24:17 +00:00
|
|
|
#[derive(Deserialize)]
|
|
|
|
pub struct Logging {
|
|
|
|
pub directory: String,
|
2022-12-03 16:08:23 +00:00
|
|
|
pub filename: String,
|
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(Deserialize)]
|
|
|
|
pub struct ErrorMessages {
|
|
|
|
pub captcha_error: String,
|
|
|
|
pub email_error: String,
|
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(Deserialize)]
|
|
|
|
pub struct Field {
|
|
|
|
pub label: String,
|
|
|
|
pub invalid_feedback: String,
|
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(Deserialize)]
|
|
|
|
pub struct Strings {
|
|
|
|
pub description: String,
|
|
|
|
pub title: String,
|
|
|
|
pub name_field: Field,
|
|
|
|
pub email_field: Field,
|
|
|
|
pub telefon_field_label: String,
|
|
|
|
pub message_field: Field,
|
|
|
|
pub captcha_field: Field,
|
|
|
|
pub submit: String,
|
|
|
|
pub success: String,
|
2022-11-01 23:24:17 +00:00
|
|
|
}
|
|
|
|
|
2022-10-28 22:41:02 +00:00
|
|
|
#[derive(Deserialize)]
|
|
|
|
pub struct Config {
|
|
|
|
pub path_prefix: String,
|
2022-11-01 23:24:17 +00:00
|
|
|
pub socket_address: SocketAddress,
|
2022-10-28 22:41:02 +00:00
|
|
|
pub email_server: EmailServer,
|
|
|
|
pub email_from: Address,
|
|
|
|
pub email_to: Address,
|
2022-11-01 23:24:17 +00:00
|
|
|
pub logging: Logging,
|
2022-12-03 16:08:23 +00:00
|
|
|
pub error_messages: ErrorMessages,
|
|
|
|
pub strings: Strings,
|
2022-10-28 22:41:02 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
impl Config {
|
2022-10-29 17:09:56 +00:00
|
|
|
pub fn new() -> Result<Self> {
|
2022-10-28 22:41:02 +00:00
|
|
|
let config_file_var = "CF_CONFIG_FILE";
|
|
|
|
let config_path = env::var(config_file_var)
|
2022-10-29 17:09:56 +00:00
|
|
|
.with_context(|| format!("Environment variable {config_file_var} missing!"))?;
|
2022-10-28 22:41:02 +00:00
|
|
|
|
2022-10-29 17:09:56 +00:00
|
|
|
let config_file = File::open(&config_path)
|
|
|
|
.with_context(|| format!("Can not open the config file at the path {config_path}"))?;
|
2022-10-28 22:41:02 +00:00
|
|
|
let config_reader = BufReader::new(config_file);
|
2022-12-03 16:08:23 +00:00
|
|
|
let config: Self = serde_yaml::from_reader(config_reader)
|
|
|
|
.context("Can not parse the YAML config file!")?;
|
2022-10-28 22:41:02 +00:00
|
|
|
|
2022-10-29 17:09:56 +00:00
|
|
|
Ok(config)
|
2022-10-28 22:41:02 +00:00
|
|
|
}
|
|
|
|
}
|