use std::{path, thread};
use std::collections::HashMap;
use std::net::ToSocketAddrs;
pub struct Config {
pub authorization: HashMap<String, String>,
pub media_source: path::PathBuf,
pub debug: bool,
pub utc_logging: bool,
pub media_host: String,
pub media_port: u16,
pub session_duration: i64,
pub file_formats: Vec<String>,
pub workers: usize,
pub max_connections: usize,
pub max_payload_size: usize,
pub websites: Vec<String>,
pub secure_session: bool,
pub key_file: path::PathBuf,
pub cert_file: path::PathBuf,
}
pub fn default_debug() -> bool { false }
pub fn default_utc_logging() -> bool { true }
pub fn default_ssl() -> path::PathBuf { path::PathBuf::new() }
pub fn default_media_host() -> String {
let hostname = "localhost";
match (hostname, 0).to_socket_addrs() {
Ok(mut addrs) => {
if let Some(addr) = addrs.find(|a| a.is_ipv4()) {
return addr.ip().to_string();
}
}
Err(err) => {
log::error!("Error resolving hostname: {}", err);
}
}
"localhost".to_string()
}
pub fn default_media_port() -> u16 { 8000 }
pub fn default_session_duration() -> i64 { 3600 }
pub fn default_file_formats() -> Vec<String> {
vec!["mp4".to_string(), "mov".to_string(), "jpg".to_string(), "jpeg".to_string()]
}
pub fn default_workers() -> usize {
let logical_cores = thread::available_parallelism();
match logical_cores {
Ok(cores) => cores.get() / 2,
Err(err) => {
log::error!("{}", err);
3
}
}
}
pub fn default_max_connections() -> usize { 3 }
pub fn default_max_payload_size() -> usize { 100 * 1024 * 1024 }
pub fn default_websites() -> Vec<String> { Vec::new() }
pub fn default_secure_session() -> bool { false }