pub trait HttpClient: Sync + Send {
type HeaderName: Clone + Sync + Send;
type Error: Debug + Display + Error + Send + Sync + 'static;
type RequestBuilder;
// Required methods
fn build_header(name: &'static str) -> Result<Self::HeaderName, Self::Error>;
fn get(&self, uri: &str) -> Self::RequestBuilder;
fn post(&self, uri: &str) -> Self::RequestBuilder;
fn header(
builder: Self::RequestBuilder,
key: &Self::HeaderName,
value: &str,
) -> Self::RequestBuilder;
fn get_json<'async_trait, T>(
req: Self::RequestBuilder,
) -> Pin<Box<dyn Future<Output = Result<T, Self::Error>> + Send + 'async_trait>>
where T: 'async_trait + DeserializeOwned,
Self: 'async_trait;
fn post_json<'life0, 'async_trait, T>(
req: Self::RequestBuilder,
content: &'life0 T,
) -> Pin<Box<dyn Future<Output = Result<bool, Self::Error>> + Send + 'async_trait>>
where T: 'async_trait + Serialize + Sync,
Self: 'async_trait,
'life0: 'async_trait;
}
Expand description
Abstraction over the concrete HTTP client being used. Implement this on any type to use it as an HTTP client.
Required Associated Types§
type HeaderName: Clone + Sync + Send
type Error: Debug + Display + Error + Send + Sync + 'static
type RequestBuilder
Required Methods§
Sourcefn build_header(name: &'static str) -> Result<Self::HeaderName, Self::Error>
fn build_header(name: &'static str) -> Result<Self::HeaderName, Self::Error>
Construct a HTTP client layer headername
Sourcefn get(&self, uri: &str) -> Self::RequestBuilder
fn get(&self, uri: &str) -> Self::RequestBuilder
Make a get request
Sourcefn post(&self, uri: &str) -> Self::RequestBuilder
fn post(&self, uri: &str) -> Self::RequestBuilder
Make a post request
Sourcefn header(
builder: Self::RequestBuilder,
key: &Self::HeaderName,
value: &str,
) -> Self::RequestBuilder
fn header( builder: Self::RequestBuilder, key: &Self::HeaderName, value: &str, ) -> Self::RequestBuilder
Add a header to a request
Sourcefn get_json<'async_trait, T>(
req: Self::RequestBuilder,
) -> Pin<Box<dyn Future<Output = Result<T, Self::Error>> + Send + 'async_trait>>where
T: 'async_trait + DeserializeOwned,
Self: 'async_trait,
fn get_json<'async_trait, T>(
req: Self::RequestBuilder,
) -> Pin<Box<dyn Future<Output = Result<T, Self::Error>> + Send + 'async_trait>>where
T: 'async_trait + DeserializeOwned,
Self: 'async_trait,
Make a get request and parse into JSON
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.