http_mini_lib/
lib.rs

1mod errors;
2mod traits;
3pub mod utils;
4
5use crate::utils::app;
6use std::env;
7use std::process::exit;
8use utils::http_server;
9
10/// # Using http-mini library:
11///
12/// **File main.rs**
13/// ```
14/// extern crate http_mini_lib;
15///
16/// fn main() {
17///     http_mini_lib::start();
18/// }
19/// ```
20// grcov-excl-start
21pub fn start() {
22    let get_params_result = app::get_params();
23    if get_params_result.is_err() {
24        println!("{}", get_params_result.err().unwrap());
25        exit(1);
26    }
27    let (address, port, source_dir) = get_params_result.unwrap();
28
29    let executable_path = env::current_exe().unwrap();
30    let executable_name = executable_path.file_name().unwrap();
31    if executable_name.is_empty() {
32        println!("Invalid executable");
33        exit(1);
34    }
35
36    let result = http_server::run(address.as_str(), port);
37    if result.is_err() {
38        println!("Http Server Error: {:?}", result.unwrap());
39        exit(1);
40    }
41
42    let listener = result.unwrap();
43
44    let llv_link_addr: String = format!(
45        "http://{}:{}",
46        if address == "::" {
47            "localhost"
48        } else {
49            address.as_str()
50        },
51        port
52    );
53    let link_addr = llv_link_addr.as_str();
54    let source_dir_path = source_dir.as_path();
55
56    for stream in listener.incoming() {
57        let stream = stream.unwrap();
58        http_server::handle_connection(stream, source_dir_path, executable_name, link_addr);
59    }
60}
61// grcov-excl-stop
62
63#[cfg(test)]
64mod tests {
65    use crate::start;
66    use std::thread;
67    use std::thread::sleep;
68    use std::time::Duration;
69
70    #[test]
71    fn test_start() {
72        let no_panic = true;
73
74        let t = thread::spawn(move || {
75            start();
76        });
77
78        sleep(Duration::new(1, 0));
79        drop(t);
80
81        assert_eq!(no_panic, true);
82    }
83}