File size: 1,503 Bytes
fc69ace
 
 
 
 
028463b
137c62e
76795c4
0d1213a
fceacdb
4afc0d1
 
 
 
028463b
 
 
 
fc69ace
 
 
 
 
 
15fc415
 
4afc0d1
 
 
fceacdb
137c62e
87e230d
76795c4
 
0d1213a
d8bd2fe
 
 
 
 
 
 
653d08c
d8bd2fe
 
0d1213a
4402168
15fc415
996ff84
15fc415
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
//! 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, config::parser::Config, run};

/// 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;

/// 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.
#[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.
    let config = Config::parse(false).unwrap();

    let cache = Cache::build(&config).await;

    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,
    );

    let listener = TcpListener::bind((config.binding_ip.clone(), config.port))?;

    run(listener, config, cache)?.await
}