feat: bidirectional http request conversion
This commit is contained in:
committed by
Martin Algesten
parent
f395a726e3
commit
dff55fda4e
@@ -500,6 +500,55 @@ impl Request {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "http")]
|
||||||
|
impl From<http::request::Builder> for Request {
|
||||||
|
fn from(value: http::request::Builder) -> Self {
|
||||||
|
let mut new_request = crate::agent().request(
|
||||||
|
value.method_ref().map_or("GET", |m| m.as_str()),
|
||||||
|
&value
|
||||||
|
.uri_ref()
|
||||||
|
.map_or("https://example.com".to_string(), |u| u.to_string()),
|
||||||
|
);
|
||||||
|
|
||||||
|
if let Some(headers) = value.headers_ref() {
|
||||||
|
new_request = headers
|
||||||
|
.iter()
|
||||||
|
.filter_map(|header| {
|
||||||
|
header
|
||||||
|
.1
|
||||||
|
.to_str()
|
||||||
|
.ok()
|
||||||
|
.map(|str_value| (header.0.as_str(), str_value))
|
||||||
|
})
|
||||||
|
.fold(new_request, |request, header| {
|
||||||
|
request.set(header.0, header.1)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
new_request
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "http")]
|
||||||
|
impl From<Request> for http::request::Builder {
|
||||||
|
fn from(value: Request) -> Self {
|
||||||
|
value
|
||||||
|
.headers
|
||||||
|
.iter()
|
||||||
|
.filter_map(|header| {
|
||||||
|
header
|
||||||
|
.value()
|
||||||
|
.map(|safe_value| (header.name().to_owned(), safe_value.to_owned()))
|
||||||
|
})
|
||||||
|
.fold(http::Request::builder(), |builder, header| {
|
||||||
|
builder.header(header.0, header.1)
|
||||||
|
})
|
||||||
|
.method(value.method())
|
||||||
|
.version(http::Version::HTTP_11)
|
||||||
|
.uri(value.url())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Parsed result of a request url with handy inspection methods.
|
/// Parsed result of a request url with handy inspection methods.
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
pub struct RequestUrl {
|
pub struct RequestUrl {
|
||||||
|
|||||||
Reference in New Issue
Block a user