mirror of
https://github.com/zed-industries/zed.git
synced 2025-01-27 04:44:30 +00:00
bbb27b9654
Co-Authored-By: Nathan Sobo <nathan@zed.dev>
26 lines
671 B
Rust
26 lines
671 B
Rust
pub use anyhow::{anyhow, Result};
|
|
use futures::future::BoxFuture;
|
|
use std::sync::Arc;
|
|
pub use surf::{
|
|
http::{Method, Response as ServerResponse},
|
|
Request, Response, Url,
|
|
};
|
|
|
|
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))?)
|
|
})
|
|
}
|
|
}
|