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.
157 lines
4.0 KiB
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
|
|
}
|
|
}
|