http_server_lib/
lib.rs

1mod addon;
2mod cli;
3mod config;
4mod server;
5mod utils;
6
7use anyhow::{Context, Result};
8use std::convert::TryFrom;
9use structopt::StructOpt;
10
11use crate::config::file::ConfigFile;
12use crate::config::Config;
13use crate::server::Server;
14
15fn resolve_config(cli_arguments: cli::Cli) -> Result<Config> {
16    if let Some(config_path) = cli_arguments.config {
17        let config_file = ConfigFile::from_file(config_path)?;
18        let config = Config::try_from(config_file)?;
19
20        return Ok(config);
21    }
22
23    // Otherwise configuration is build from CLI arguments
24    Config::try_from(cli_arguments)
25        .with_context(|| anyhow::Error::msg("Failed to parse arguments from stdin"))
26}
27
28pub fn make_server() -> Result<Server> {
29    let cli_arguments = cli::Cli::from_args();
30    let config = resolve_config(cli_arguments)?;
31    let server = Server::new(config);
32
33    Ok(server)
34}