use std::num::{ParseIntError, ParseFloatError};
use hyper;
use hyper::client::HttpConnector;
use hyper_tls;
use tokio_core::reactor::Handle;
const HTTPS_DNS_THREADS: usize = 4;
pub type HttpsConnector = hyper_tls::HttpsConnector<HttpConnector>;
pub type HttpsClient = hyper::Client<HttpsConnector>;
pub fn https_client(handle: &Handle) -> HttpsClient {
let connector =
hyper_tls::HttpsConnector::new(HTTPS_DNS_THREADS, handle).unwrap();
hyper::client::Config::default()
.connector(connector)
.build(handle)
}
pub fn parse_number(s: &str) -> Result<f64, ParseNumberError> {
let nums: Vec<_> = s.trim().split('/').collect();
let num_count = nums.len();
match num_count {
1 => {
let amount = nums[0].trim();
amount.parse::<u64>().map(|a| a as f64)
.or_else(|_| amount.parse::<f64>())
.map_err(Into::into)
},
2 => {
let numerator: f64 = nums[0].trim().parse()?;
let denominator: f64 = nums[1].trim().parse()?;
Ok(numerator / denominator)
}
_ => Err(ParseNumberError::Syntax),
}
}
#[derive(Debug, Error)]
pub enum ParseNumberError {
Float(ParseFloatError),
Rational(ParseIntError),
Syntax,
}