0
0
mirror of https://github.com/neon-mmd/websurfx.git synced 2024-11-22 22:18:23 -05:00
websurfx/src/bin/websurfx.rs

59 lines
1.7 KiB
Rust
Raw Normal View History

2023-04-27 10:53:28 -04:00
//! Main module of the application
//!
//! This module contains the main function which handles the logging of the application to the
//! stdout and handles the command line arguments provided and launches the `websurfx` server.
use mimalloc::MiMalloc;
use std::net::TcpListener;
use websurfx::{
cache::cacher::Cache, cache::redis_cacher::RedisCache, config::parser::Config, run,
};
2023-04-24 06:12:44 -04:00
/// A dhat heap memory profiler
#[cfg(feature = "dhat-heap")]
#[global_allocator]
static ALLOC: dhat::Alloc = dhat::Alloc;
#[cfg(not(feature = "dhat-heap"))]
#[global_allocator]
static GLOBAL: MiMalloc = MiMalloc;
2023-04-27 10:53:28 -04:00
/// The function that launches the main server and registers all the routes of the website.
///
/// # Error
///
/// Returns an error if the port is being used by something else on the system and is not
/// available for being used for other applications.
2023-04-22 07:35:07 -04:00
#[actix_web::main]
async fn main() -> std::io::Result<()> {
// A dhat heap profiler initialization.
#[cfg(feature = "dhat-heap")]
let _profiler = dhat::Profiler::new_heap();
// Initialize the parsed config file.
2023-08-19 03:09:09 -04:00
let config = Config::parse(false).unwrap();
let cache = match &config.redis_url {
Some(url) => Cache::new(
RedisCache::new(url, 5)
.await
.expect("Redis cache configured"),
),
None => Cache::new_in_memory(),
};
2023-04-24 06:12:44 -04:00
log::info!(
"started server on port {} and IP {}",
config.port,
config.binding_ip
);
log::info!(
"Open http://{}:{}/ in your browser",
config.binding_ip,
config.port,
);
2023-04-24 06:12:44 -04:00
let listener = TcpListener::bind((config.binding_ip.clone(), config.port))?;
2023-04-22 07:35:07 -04:00
run(listener, config, cache)?.await
2023-04-22 07:35:07 -04:00
}