contact-form/src/config.rs

73 lines
1.7 KiB
Rust

use anyhow::{Context, Result};
use serde::Deserialize;
use std::env;
use std::fs::File;
use std::io::BufReader;
#[derive(Deserialize)]
pub struct EmailServer {
pub server_name: String,
pub email: String,
pub password: String,
}
#[derive(Deserialize)]
pub struct UtcOffset {
pub hours: i8,
pub minutes: i8,
}
#[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,
}
#[derive(Deserialize)]
pub struct Config {
pub lang: String,
pub path_prefix: String,
pub socket_address: String,
pub email_server: EmailServer,
pub email_from: String,
pub email_to: String,
pub log_file: String,
pub utc_offset: UtcOffset,
pub error_messages: ErrorMessages,
pub strings: Strings,
}
impl Config {
pub fn new() -> Result<Self> {
let config_file_var = "CF_CONFIG_FILE";
let config_path = env::var(config_file_var)
.with_context(|| format!("Environment variable {config_file_var} missing!"))?;
let config_file = File::open(&config_path)
.with_context(|| format!("Can not open the config file at the path {config_path}"))?;
let config_reader = BufReader::new(config_file);
let config: Self = serde_yaml::from_reader(config_reader)
.context("Can not parse the YAML config file!")?;
Ok(config)
}
}