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 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}