You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
fast-insiders/server/src/env.rs

157 lines
4.0 KiB

use std::net::SocketAddr;
use serde::Deserialize;
#[derive(Deserialize, Debug)]
pub struct Env {
#[serde(default = "host_default")]
pub host: String,
#[serde(default = "port_default")]
pub port: String,
pub mysql_user: String,
pub mysql_password: String,
pub mysql_host: String,
#[serde(default = "mysql_port_default")]
pub mysql_port: String,
#[serde(default = "mysql_database_default")]
pub mysql_database: String,
#[serde(default = "max_connections_default")]
pub max_connections: u32,
#[serde(default = "min_connections_default")]
pub min_connections: u32,
#[serde(default = "connect_timeout_default")]
pub connect_timeout: u64,
#[serde(default = "acquire_timeout_default")]
pub acquire_timeout: u64,
#[serde(default = "idle_timeout_default")]
pub idle_timeout: u64,
#[serde(default = "max_lifetime_default")]
pub max_lifetime: u64,
#[serde(default = "sqlx_logging_default")]
pub sqlx_logging: bool,
#[serde(default = "amf_informations_req")]
pub amf_informations_req: String,
#[serde(default = "amf_documents_path")]
pub amf_documents_path: String,
#[serde(default = "get_amf_transaction_interval")]
pub get_amf_transaction_interval: u64,
}
fn host_default() -> String {
"127.0.0.1".to_string()
}
fn port_default() -> String {
"8000".to_string()
}
fn mysql_port_default() -> String {
"3306".to_string()
}
fn mysql_database_default() -> String {
"fast-insiders".to_string()
}
fn max_connections_default() -> u32 {
100
}
fn min_connections_default() -> u32 {
5
}
fn connect_timeout_default() -> u64 {
8
}
fn acquire_timeout_default() -> u64 {
8
}
fn idle_timeout_default() -> u64 {
8
}
fn max_lifetime_default() -> u64 {
8
}
fn sqlx_logging_default() -> bool {
false
}
fn amf_documents_path() -> String {
"https://bdif.amf-france.org/back/api/v1/documents/".to_string()
}
fn amf_informations_req() -> String {
"https://bdif.amf-france.org/back/api/v1/informations?rechercheTexte=&typesInformation={{inf_type}}&from={{from}}&size={{size}}".to_string()
}
fn get_amf_transaction_interval() -> u64 {
3600
}
impl Env {
fn new() -> Self {
if cfg!(debug_assertions) {
// A .env file will only be loaded in a dev or debug environment
dotenvy::dotenv().expect("Failed to load .env file");
}
envy::from_env::<Env>().expect("Failed to load env")
}
}
#[derive(Debug)]
pub struct Config {
pub server_address: SocketAddr,
pub database_url: String,
pub max_connections: u32,
pub min_connections: u32,
pub connect_timeout: u64,
pub acquire_timeout: u64,
pub idle_timeout: u64,
pub max_lifetime: u64,
pub sqlx_logging: bool,
pub amf_informations_req: String,
pub amf_documents_path: String,
pub get_amf_transaction_interval: u64,
}
impl Config {
pub fn new() -> Self {
let env = Env::new();
let database_url = format!(
"mysql://{}:{}@{}:{}/{}",
env.mysql_user, env.mysql_password, env.mysql_host, env.mysql_port, env.mysql_database
);
let server_address = format!("{}:{}", env.host, env.port)
.parse()
.expect("Could not parse host and port combination into a valid server address");
let mut config = Config {
server_address,
database_url,
max_connections: env.max_connections,
min_connections: env.min_connections,
connect_timeout: env.connect_timeout,
acquire_timeout: env.acquire_timeout,
idle_timeout: env.idle_timeout,
max_lifetime: env.max_lifetime,
sqlx_logging: env.sqlx_logging,
amf_informations_req: env.amf_informations_req,
amf_documents_path: env.amf_documents_path,
get_amf_transaction_interval: env.get_amf_transaction_interval,
};
if config.amf_documents_path.chars().last().unwrap_or('/') != '/' {
config.amf_documents_path.push('/');
}
config
}
}