#[macro_use] extern crate log;
extern crate log4rs;
extern crate reqwest;
extern crate httpbox;
use log4rs::append::console::ConsoleAppender;
use log4rs::config::{Appender, Config, Logger, Root};
use log::LevelFilter;
use reqwest::Client;
use std::io::Write;
use std::time::Duration;
use httpbox::cli::CLI;
use httpbox::core::RequestParameters;
fn main() {
let cli = CLI::new();
let mut req_params = cli.get_request_parameters();
let log_level_filter = cli.get_log_level_filter();
init_logging(log_level_filter);
let client = build_client(&req_params);
let request = client.request(req_params.method.clone(), req_params.url.clone()).build().unwrap();
let mut response = client.execute(request).unwrap();
trace!("{:#?}", response);
let output_writer = req_params.borrow_mut_output_writer();
let bytes_written = response.copy_to(output_writer).unwrap();
output_writer.flush().unwrap();
trace!("Written {} bytes", bytes_written);
}
#[allow(unused)]
fn build_client(req_params: &RequestParameters) -> Client {
reqwest::Client::builder()
.gzip(true) .timeout(Duration::from_secs(30)) .build().unwrap()
}
fn init_logging(log_level_filter: LevelFilter) {
let log_config = Config::builder()
.appender(Appender::builder().build("stdout", Box::new(ConsoleAppender::builder().build())))
.logger(Logger::builder().build("mio", LevelFilter::Off))
.logger(Logger::builder().build("tokio_core", LevelFilter::Off))
.logger(Logger::builder().build("hyper", LevelFilter::Off))
.build(Root::builder().appender("stdout").build(log_level_filter))
.unwrap();
log4rs::init_config(log_config).unwrap();
}