diff --git a/src/adapter.rs b/src/adapter.rs index 0c44e504..ba67d13e 100644 --- a/src/adapter.rs +++ b/src/adapter.rs @@ -115,20 +115,18 @@ impl Adapter { return Ok(Buffer::new()); } - if let Some(sub) = { - if let Some(front) = self.deque.front() { - if front.get_size() - self.skip >= size { - let new = front.get_buffer().copy_region(self.skip, Some(size)).unwrap(); - Some(new) - } else { - None - } + let sub = self.deque.front().and_then(|front| { + if front.get_size() - self.skip >= size { + let new = front.get_buffer().copy_region(self.skip, Some(size)).unwrap(); + Some(new) } else { None } - } { + }); + + if let Some(s) = sub { self.flush(size).unwrap(); - return Ok(sub); + return Ok(s); } let mut new = Buffer::new_with_size(size).unwrap(); diff --git a/src/rshttpsrc.rs b/src/rshttpsrc.rs index b42c24f5..6dc7d81f 100644 --- a/src/rshttpsrc.rs +++ b/src/rshttpsrc.rs @@ -65,13 +65,12 @@ impl HttpSrc { -> Result { let mut req = self.client.get(uri.clone()); - if start != 0 || stop.is_some() { - req = match stop { - None => req.header(Range::Bytes(vec![ByteRangeSpec::AllFrom(start)])), - Some(stop) => { - req.header(Range::Bytes(vec![ByteRangeSpec::FromTo(start, stop - 1)])) - } - }; + match (start != 0, stop) { + (false, None) => (), + (true, None) => req = req.header(Range::Bytes(vec![ByteRangeSpec::AllFrom(start)])), + (_, Some(stop)) => { + req = req.header(Range::Bytes(vec![ByteRangeSpec::FromTo(start, stop - 1)])) + } } let response = try!(req.send().or_else(|err| { @@ -84,11 +83,7 @@ impl HttpSrc { ["Failed to fetch {}: {}", uri, response.status()])); } - let size = if let Some(&ContentLength(content_length)) = response.headers().get() { - Some(content_length + start) - } else { - None - }; + let size = response.headers().get().map(|&ContentLength(cl)| cl + start); let accept_byte_ranges = if let Some(&AcceptRanges(ref ranges)) = response.headers() .get() { diff --git a/src/rssource.rs b/src/rssource.rs index ac01262b..88781869 100644 --- a/src/rssource.rs +++ b/src/rssource.rs @@ -122,10 +122,7 @@ impl SourceWrapper { fn get_size(&self) -> u64 { let source = &self.source.lock().unwrap(); - match source.get_size() { - Some(size) => size, - None => u64::MAX, - } + source.get_size().unwrap_or(u64::MAX) } fn start(&self) -> bool {