2021-09-14 19:09:49 +00:00
|
|
|
pub use anyhow::{anyhow, Result};
|
|
|
|
use futures::future::BoxFuture;
|
|
|
|
use std::sync::Arc;
|
|
|
|
pub use surf::{
|
2021-09-14 22:28:26 +00:00
|
|
|
http::{Method, Response as ServerResponse},
|
|
|
|
Request, Response, Url,
|
2021-09-14 19:09:49 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
pub trait HttpClient: Send + Sync {
|
|
|
|
fn send<'a>(&'a self, req: Request) -> BoxFuture<'a, Result<Response>>;
|
|
|
|
}
|
|
|
|
|
|
|
|
pub fn client() -> Arc<dyn HttpClient> {
|
|
|
|
Arc::new(surf::client())
|
|
|
|
}
|
|
|
|
|
|
|
|
impl HttpClient for surf::Client {
|
|
|
|
fn send<'a>(&'a self, req: Request) -> BoxFuture<'a, Result<Response>> {
|
|
|
|
Box::pin(async move {
|
|
|
|
Ok(self
|
|
|
|
.send(req)
|
|
|
|
.await
|
|
|
|
.map_err(|e| anyhow!("http request failed: {}", e))?)
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|