From 879b058be20ef0e115dfb3ac1c0d651a07daadad Mon Sep 17 00:00:00 2001 From: Sam Gibson Date: Sun, 16 Aug 2015 12:41:35 +1000 Subject: [PATCH] Returns LoadResponse struct instead of a tuple Still boxes the reader, but at least is a step in the right direction --- components/net/http_loader.rs | 23 +++++++++++++++++------ tests/unit/net/http_loader.rs | 4 ++-- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/components/net/http_loader.rs b/components/net/http_loader.rs index 1fbe2ec26e8..4f60ddbc548 100644 --- a/components/net/http_loader.rs +++ b/components/net/http_loader.rs @@ -128,8 +128,8 @@ fn load_for_consumer(load_data: LoadData, file_loader::factory(load_data, start_chan, classifier) } - Ok((mut response_reader, metadata)) => { - send_data(&mut response_reader, start_chan, metadata, classifier) + Ok(mut load_response) => { + send_data(&mut load_response.reader, start_chan, load_response.metadata, classifier) } } } @@ -351,11 +351,22 @@ fn update_sts_list_from_response(url: &Url, response: &HttpResponse, resource_mg } } +pub struct LoadResponse { + pub reader: Box, + pub metadata: Metadata +} + +impl LoadResponse { + fn new(r: Box, m: Metadata) -> LoadResponse { + LoadResponse { reader: r, metadata: m } + } +} + pub fn load(mut load_data: LoadData, resource_mgr_chan: IpcSender, devtools_chan: Option>, request_factory: &HttpRequestFactory) - -> Result<(Box, Metadata), LoadError> where A: HttpRequest + 'static { + -> Result where A: HttpRequest + 'static { // FIXME: At the time of writing this FIXME, servo didn't have any central // location for configuration. If you're reading this and such a // repository DOES exist, please update this constant to use it. @@ -569,7 +580,7 @@ pub fn load(mut load_data: LoadData, let result = GzDecoder::new(response); match result { Ok(response_decoding) => { - return Ok((Box::new(response_decoding), metadata)); + return Ok(LoadResponse::new(Box::new(response_decoding), metadata)); } Err(err) => { return Err(LoadError::Decoding(metadata.final_url, err.to_string())); @@ -578,10 +589,10 @@ pub fn load(mut load_data: LoadData, } Some(Encoding::Deflate) => { let response_decoding = DeflateDecoder::new(response); - return Ok((Box::new(response_decoding), metadata)); + return Ok(LoadResponse::new(Box::new(response_decoding), metadata)); } None => { - return Ok((Box::new(response), metadata)); + return Ok(LoadResponse::new(Box::new(response), metadata)); } _ => return Err(LoadError::UnsupportedContentEncodings(url.clone())) } diff --git a/tests/unit/net/http_loader.rs b/tests/unit/net/http_loader.rs index 564b87de79f..b820ddd8b37 100644 --- a/tests/unit/net/http_loader.rs +++ b/tests/unit/net/http_loader.rs @@ -495,8 +495,8 @@ fn test_load_follows_a_redirect() { match load::(load_data, resource_mgr, None, &Factory) { Err(_) => panic!("expected to follow a redirect"), - Ok((mut r, _)) => { - let response = read_response(&mut *r); + Ok(mut lr) => { + let response = read_response(&mut *lr.reader); assert_eq!(response, "Yay!".to_string()); } }