use config::ClientConfig;
use error::Error;
use request::Request;
use request_builder::RequestBuilder;
use reqwest::{IntoUrl, Method};
use response::Response;
pub trait Client: Sized {
fn execute(&self, config: Option<&ClientConfig>, request: Request) -> Result<Response, Error>;
fn config(&self) -> &ClientConfig;
fn config_mut(&mut self) -> &mut ClientConfig;
fn get<'cl, U: IntoUrl>(&'cl self, url: U) -> RequestBuilder<'cl, Self> {
self.request(Method::GET, url)
}
fn post<'cl, U: IntoUrl>(&'cl self, url: U) -> RequestBuilder<'cl, Self> {
self.request(Method::POST, url)
}
fn put<'cl, U: IntoUrl>(&'cl self, url: U) -> RequestBuilder<'cl, Self> {
self.request(Method::PUT, url)
}
fn patch<'cl, U: IntoUrl>(&'cl self, url: U) -> RequestBuilder<'cl, Self> {
self.request(Method::PATCH, url)
}
fn delete<'cl, U: IntoUrl>(&'cl self, url: U) -> RequestBuilder<'cl, Self> {
self.request(Method::DELETE, url)
}
fn head<'cl, U: IntoUrl>(&'cl self, url: U) -> RequestBuilder<'cl, Self> {
self.request(Method::HEAD, url)
}
fn request<'cl, U: IntoUrl>(&'cl self, method: Method, url: U) -> RequestBuilder<'cl, Self> {
RequestBuilder::new(self, url, method)
}
}
mod direct;
pub use self::direct::DirectClient;
mod replay;
pub use self::replay::{RecordingTarget, ReplayClient};
mod stub;
pub use self::stub::{
RequestStubber, ResponseStubber, StubClient, StubDefault, StubSettings, StubStrictness,
};
mod generic;
pub use self::generic::GenericClient;