use crate::error::Result;
use crate::Request;
use hyper::{client::HttpConnector, header::HeaderMap, Client, Method, Uri};
pub struct Grillon {
base_url: Uri,
client: Client<HttpConnector>,
}
impl Grillon {
pub fn new(api_base_url: &str) -> Result<Grillon> {
Ok(Grillon {
base_url: api_base_url.parse::<Uri>()?,
client: Client::builder().build_http(),
})
}
pub fn get(&self, path: &str) -> Request {
self.http_request(Method::GET, path)
}
pub fn post(&self, path: &str) -> Request {
self.http_request(Method::POST, path)
}
pub fn put(&self, path: &str) -> Request {
self.http_request(Method::PUT, path)
}
pub fn patch(&self, path: &str) -> Request {
self.http_request(Method::PATCH, path)
}
pub fn delete(&self, path: &str) -> Request {
self.http_request(Method::DELETE, path)
}
pub fn options(&self, path: &str) -> Request {
self.http_request(Method::OPTIONS, path)
}
pub fn head(&self, path: &str) -> Request {
self.http_request(Method::HEAD, path)
}
pub fn connect(&self, path: &str) -> Request {
println!("METHOD = {}", Method::CONNECT.as_str());
self.http_request(Method::CONNECT, path)
}
pub fn http_request(&self, method: Method, path: &str) -> Request {
let uri = crate::url::concat(&self.base_url, path).unwrap_or_else(|err| panic!("{}", err));
Request {
method,
uri,
headers: HeaderMap::new(),
payload: None,
client: &self.client,
}
}
}