[http-client] Deny unused results
Change-Id: Ia1f382b134f88dc1c22354ed01fc21ed6cd50a7e
Reviewed-on: https://fuchsia-review.googlesource.com/c/fuchsia/+/514900
Commit-Queue: Peter Johnston <peterjohnston@google.com>
Reviewed-by: Tamir Duberstein <tamird@google.com>
Reviewed-by: Jay Zhuang <jayzhuang@google.com>
Reviewed-by: Nick Brown <nickbrow@google.com>
diff --git a/build/config/rust/BUILD.gn b/build/config/rust/BUILD.gn
index 0645992..4635a9f 100644
--- a/build/config/rust/BUILD.gn
+++ b/build/config/rust/BUILD.gn
@@ -142,7 +142,6 @@
"//src/connectivity/location/*",
"//src/connectivity/lowpan/*",
"//src/connectivity/management/*",
- "//src/connectivity/network/http-client/*",
"//src/connectivity/network/lib/*",
"//src/connectivity/network/netstack/*",
"//src/connectivity/network/netstack3/*",
diff --git a/src/connectivity/network/http-client/BUILD.gn b/src/connectivity/network/http-client/BUILD.gn
index 1fb4727..ba800f0 100644
--- a/src/connectivity/network/http-client/BUILD.gn
+++ b/src/connectivity/network/http-client/BUILD.gn
@@ -31,6 +31,8 @@
]
sources = [ "src/main.rs" ]
+
+ configs -= [ "//build/config/rust:allow_unused_results" ]
}
# TODO(fxbug.dev/72870): Remove v1 component once integration tests are no
diff --git a/src/connectivity/network/http-client/integration/BUILD.gn b/src/connectivity/network/http-client/integration/BUILD.gn
index 7613c49..809246d 100644
--- a/src/connectivity/network/http-client/integration/BUILD.gn
+++ b/src/connectivity/network/http-client/integration/BUILD.gn
@@ -19,6 +19,8 @@
]
sources = [ "src/lib.rs" ]
+
+ configs -= [ "//build/config/rust:allow_unused_results" ]
}
# TODO(fxbug.dev/71088): Combine `test-driver` and the test root once
diff --git a/src/connectivity/network/http-client/src/main.rs b/src/connectivity/network/http-client/src/main.rs
index 5a47e34..8932e47 100644
--- a/src/connectivity/network/http-client/src/main.rs
+++ b/src/connectivity/network/http-client/src/main.rs
@@ -6,13 +6,14 @@
anyhow::{Context as _, Error},
fidl_fuchsia_net_http as net_http,
fuchsia_async::{self as fasync, TimeoutExt as _},
- fuchsia_component::server::ServiceFs,
+ fuchsia_component::server::{ServiceFs, ServiceFsDir},
fuchsia_hyper as fhyper,
fuchsia_zircon::{self as zx, AsHandleRef},
futures::{future::BoxFuture, prelude::*, StreamExt},
hyper,
log::{debug, error, info, trace},
std::convert::TryFrom,
+ std::str::FromStr as _,
};
static MAX_REDIRECTS: u8 = 10;
@@ -194,21 +195,22 @@
impl Loader {
async fn new(req: net_http::Request) -> Result<Self, Error> {
- let method =
- hyper::Method::from_bytes(req.method.unwrap_or_else(|| "GET".to_string()).as_bytes())?;
- if let Some(url) = req.url {
+ let net_http::Request { method, url, headers, body, deadline, .. } = req;
+ let method = method.as_ref().map(|method| hyper::Method::from_str(method)).transpose()?;
+ let method = method.unwrap_or(hyper::Method::GET);
+ if let Some(url) = url {
let url = hyper::Uri::try_from(url)?;
- let mut headers = hyper::HeaderMap::new();
- if let Some(h) = req.headers {
- for header in &h {
- headers.insert(
- hyper::header::HeaderName::from_bytes(&header.name)?,
- hyper::header::HeaderValue::from_bytes(&header.value)?,
- );
- }
- }
+ let headers = headers
+ .unwrap_or_else(|| vec![])
+ .into_iter()
+ .map(|net_http::Header { name, value }| {
+ let name = hyper::header::HeaderName::from_bytes(&name)?;
+ let value = hyper::header::HeaderValue::from_bytes(&value)?;
+ Ok((name, value))
+ })
+ .collect::<Result<hyper::HeaderMap, Error>>()?;
- let body = match req.body {
+ let body = match body {
Some(net_http::Body::Buffer(buffer)) => {
let mut bytes = vec![0; buffer.size as usize];
buffer.vmo.read(&mut bytes, 0)?;
@@ -227,8 +229,7 @@
None => Vec::new(),
};
- let deadline = req
- .deadline
+ let deadline = deadline
.map(|deadline| fasync::Time::from_nanos(deadline))
.unwrap_or_else(|| fasync::Time::after(DEFAULT_DEADLINE_DURATION));
@@ -410,8 +411,8 @@
async fn main() -> Result<(), Error> {
fuchsia_syslog::init()?;
let mut fs = ServiceFs::new();
- fs.dir("svc").add_fidl_service(spawn_server);
- fs.take_and_serve_directory_handle()?;
+ let _: &mut ServiceFsDir<'_, _> = fs.dir("svc").add_fidl_service(spawn_server);
+ let _: &mut ServiceFs<_> = fs.take_and_serve_directory_handle()?;
let () = fs.collect().await;
Ok(())
}