Some checks failed
CI/CD Pipeline / Test Suite (push) Has been cancelled
CI/CD Pipeline / Security Audit (push) Has been cancelled
CI/CD Pipeline / Build Docker Image (push) Has been cancelled
CI/CD Pipeline / Deploy to Staging (push) Has been cancelled
CI/CD Pipeline / Deploy to Production (push) Has been cancelled
CI/CD Pipeline / Performance Benchmarks (push) Has been cancelled
CI/CD Pipeline / Cleanup (push) Has been cancelled
74 lines
2.2 KiB
Rust
74 lines
2.2 KiB
Rust
//! Server utilities module
|
|
|
|
use crate::*;
|
|
|
|
/// Server configuration
|
|
#[derive(Debug, Clone)]
|
|
pub struct ServerConfig {
|
|
/// Server address
|
|
pub addr: std::net::SocketAddr,
|
|
/// Environment mode
|
|
pub environment: Environment,
|
|
/// Whether to enable request logging
|
|
pub enable_logging: bool,
|
|
/// Whether to enable CORS
|
|
pub enable_cors: bool,
|
|
}
|
|
|
|
impl ServerConfig {
|
|
/// Create server config from environment variables
|
|
pub fn from_env() -> Result<Self, std::env::VarError> {
|
|
let host = std::env::var("HOST").unwrap_or_else(|_| "127.0.0.1".to_string());
|
|
let port = std::env::var("PORT")
|
|
.unwrap_or_else(|_| "3000".to_string())
|
|
.parse::<u16>()
|
|
.unwrap_or(3000);
|
|
|
|
let environment = match std::env::var("ENVIRONMENT").as_deref() {
|
|
Ok("production") => Environment::Production,
|
|
Ok("staging") => Environment::Staging,
|
|
Ok(custom) => Environment::Custom(custom.to_string()),
|
|
_ => Environment::Development,
|
|
};
|
|
|
|
Ok(Self {
|
|
addr: format!("{}:{}", host, port).parse().unwrap(),
|
|
environment,
|
|
enable_logging: std::env::var("ENABLE_LOGGING")
|
|
.map(|v| v == "true")
|
|
.unwrap_or(true),
|
|
enable_cors: std::env::var("ENABLE_CORS")
|
|
.map(|v| v == "true")
|
|
.unwrap_or(true),
|
|
})
|
|
}
|
|
}
|
|
|
|
impl Default for ServerConfig {
|
|
fn default() -> Self {
|
|
Self {
|
|
addr: "127.0.0.1:3000".parse().unwrap(),
|
|
environment: Environment::Development,
|
|
enable_logging: true,
|
|
enable_cors: true,
|
|
}
|
|
}
|
|
}
|
|
|
|
/// Initialize server with configuration
|
|
pub async fn init_server() -> Result<(), Box<dyn std::error::Error>> {
|
|
// Initialize panic handler for better error messages
|
|
console_error_panic_hook::set_once();
|
|
|
|
// Initialize logging
|
|
if std::env::var("RUST_LOG").is_err() {
|
|
std::env::set_var("RUST_LOG", "server_template=debug");
|
|
}
|
|
|
|
tracing_subscriber::fmt()
|
|
.with_env_filter(tracing_subscriber::EnvFilter::from_default_env())
|
|
.init();
|
|
|
|
tracing::info!("Server initialized");
|
|
Ok(())
|
|
} |