Merge pull request #403 from hyperium/stabilize
Remove box_syntax and collections feature gates
This commit is contained in:
		| @@ -57,7 +57,7 @@ impl Request<Fresh> { | |||||||
|  |  | ||||||
|         let stream = try!(connector.connect(&*host, port, &*url.scheme)); |         let stream = try!(connector.connect(&*host, port, &*url.scheme)); | ||||||
|         // FIXME: Use Type ascription |         // FIXME: Use Type ascription | ||||||
|         let stream: Box<NetworkStream + Send> = box stream; |         let stream: Box<NetworkStream + Send> = Box::new(stream); | ||||||
|         let stream = ThroughWriter(BufWriter::new(stream)); |         let stream = ThroughWriter(BufWriter::new(stream)); | ||||||
|  |  | ||||||
|         let mut headers = Headers::new(); |         let mut headers = Headers::new(); | ||||||
|   | |||||||
| @@ -130,13 +130,13 @@ mod tests { | |||||||
|             status: status::StatusCode::Ok, |             status: status::StatusCode::Ok, | ||||||
|             headers: Headers::new(), |             headers: Headers::new(), | ||||||
|             version: version::HttpVersion::Http11, |             version: version::HttpVersion::Http11, | ||||||
|             body: EofReader(BufReader::new(box MockStream::new())), |             body: EofReader(BufReader::new(Box::new(MockStream::new()))), | ||||||
|             status_raw: RawStatus(200, Borrowed("OK")), |             status_raw: RawStatus(200, Borrowed("OK")), | ||||||
|             _marker: PhantomData, |             _marker: PhantomData, | ||||||
|         }; |         }; | ||||||
|  |  | ||||||
|         let b = res.into_inner().downcast::<MockStream>().ok().unwrap(); |         let b = res.into_inner().downcast::<MockStream>().ok().unwrap(); | ||||||
|         assert_eq!(b, box MockStream::new()); |         assert_eq!(b, Box::new(MockStream::new())); | ||||||
|  |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -156,7 +156,7 @@ mod tests { | |||||||
|             \r\n" |             \r\n" | ||||||
|         ); |         ); | ||||||
|  |  | ||||||
|         let res = Response::new(box stream).unwrap(); |         let res = Response::new(Box::new(stream)).unwrap(); | ||||||
|  |  | ||||||
|         // The status line is correct? |         // The status line is correct? | ||||||
|         assert_eq!(res.status, status::StatusCode::Ok); |         assert_eq!(res.status, status::StatusCode::Ok); | ||||||
| @@ -187,7 +187,7 @@ mod tests { | |||||||
|             \r\n" |             \r\n" | ||||||
|         ); |         ); | ||||||
|  |  | ||||||
|         let res = Response::new(box stream).unwrap(); |         let res = Response::new(Box::new(stream)).unwrap(); | ||||||
|  |  | ||||||
|         assert!(read_to_string(res).is_err()); |         assert!(read_to_string(res).is_err()); | ||||||
|     } |     } | ||||||
| @@ -206,7 +206,7 @@ mod tests { | |||||||
|             \r\n" |             \r\n" | ||||||
|         ); |         ); | ||||||
|  |  | ||||||
|         let res = Response::new(box stream).unwrap(); |         let res = Response::new(Box::new(stream)).unwrap(); | ||||||
|  |  | ||||||
|         assert!(read_to_string(res).is_err()); |         assert!(read_to_string(res).is_err()); | ||||||
|     } |     } | ||||||
| @@ -225,7 +225,7 @@ mod tests { | |||||||
|             \r\n" |             \r\n" | ||||||
|         ); |         ); | ||||||
|  |  | ||||||
|         let res = Response::new(box stream).unwrap(); |         let res = Response::new(Box::new(stream)).unwrap(); | ||||||
|  |  | ||||||
|         assert_eq!(read_to_string(res), Ok("1".to_string())); |         assert_eq!(read_to_string(res), Ok("1".to_string())); | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -85,7 +85,7 @@ impl Item { | |||||||
| fn parse<H: Header + HeaderFormat>(raw: &Vec<Vec<u8>>) -> Option<Box<HeaderFormat + Send + Sync>> { | fn parse<H: Header + HeaderFormat>(raw: &Vec<Vec<u8>>) -> Option<Box<HeaderFormat + Send + Sync>> { | ||||||
|     Header::parse_header(&raw[..]).map(|h: H| { |     Header::parse_header(&raw[..]).map(|h: H| { | ||||||
|         // FIXME: Use Type ascription |         // FIXME: Use Type ascription | ||||||
|         let h: Box<HeaderFormat + Send + Sync> = box h; |         let h: Box<HeaderFormat + Send + Sync> = Box::new(h); | ||||||
|         h |         h | ||||||
|     }) |     }) | ||||||
| } | } | ||||||
|   | |||||||
| @@ -356,11 +356,21 @@ mod tests { | |||||||
|  |  | ||||||
|     use test::Bencher; |     use test::Bencher; | ||||||
|  |  | ||||||
|  |     // Slice.position_elem is unstable | ||||||
|  |     fn index_of(slice: &[u8], byte: u8) -> Option<usize> { | ||||||
|  |         for (index, &b) in slice.iter().enumerate() { | ||||||
|  |             if b == byte { | ||||||
|  |                 return Some(index); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         None | ||||||
|  |     } | ||||||
|  |  | ||||||
|     macro_rules! raw { |     macro_rules! raw { | ||||||
|         ($($line:expr),*) => ({ |         ($($line:expr),*) => ({ | ||||||
|             [$({ |             [$({ | ||||||
|                 let line = $line; |                 let line = $line; | ||||||
|                 let pos = line.position_elem(&b':').expect("raw splits on :, not found"); |                 let pos = index_of(line, b':').expect("raw splits on ':', not found"); | ||||||
|                 httparse::Header { |                 httparse::Header { | ||||||
|                     name: ::std::str::from_utf8(&line[..pos]).unwrap(), |                     name: ::std::str::from_utf8(&line[..pos]).unwrap(), | ||||||
|                     value: &line[pos + 2..] |                     value: &line[pos + 2..] | ||||||
|   | |||||||
| @@ -47,29 +47,29 @@ impl FromStr for EntityTag { | |||||||
|         // Early exits: |         // Early exits: | ||||||
|         // 1. The string is empty, or, |         // 1. The string is empty, or, | ||||||
|         // 2. it doesn't terminate in a DQUOTE. |         // 2. it doesn't terminate in a DQUOTE. | ||||||
|         if slice.is_empty() || !slice.ends_with("\"") { |         if slice.is_empty() || !slice.ends_with('"') { | ||||||
|             return Err(()); |             return Err(()); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         // The etag is weak if its first char is not a DQUOTE. |         // The etag is weak if its first char is not a DQUOTE. | ||||||
|         if slice.chars().next().unwrap() == '"' /* '"' */ { |         if slice.starts_with('"') /* '"' */ { | ||||||
|             // No need to check if the last char is a DQUOTE, |             // No need to check if the last char is a DQUOTE, | ||||||
|             // we already did that above. |             // we already did that above. | ||||||
|             if check_slice_validity(slice.slice_chars(1, length-1)) { |             if check_slice_validity(&slice[1..length-1]) { | ||||||
|                 return Ok(EntityTag { |                 return Ok(EntityTag { | ||||||
|                     weak: false, |                     weak: false, | ||||||
|                     tag: slice.slice_chars(1, length-1).to_string() |                     tag: slice[1..length-1].to_string() | ||||||
|                 }); |                 }); | ||||||
|             } else { |             } else { | ||||||
|                 return Err(()); |                 return Err(()); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         if slice.slice_chars(0, 3) == "W/\"" { |         if slice.starts_with("W/\"") { | ||||||
|             if check_slice_validity(slice.slice_chars(3, length-1)) { |             if check_slice_validity(&slice[3..length-1]) { | ||||||
|                 return Ok(EntityTag { |                 return Ok(EntityTag { | ||||||
|                     weak: true, |                     weak: true, | ||||||
|                     tag: slice.slice_chars(3, length-1).to_string() |                     tag: slice[3..length-1].to_string() | ||||||
|                 }); |                 }); | ||||||
|             } else { |             } else { | ||||||
|                 return Err(()); |                 return Err(()); | ||||||
|   | |||||||
| @@ -1,6 +1,5 @@ | |||||||
| #![doc(html_root_url = "https://hyperium.github.io/hyper/hyper/index.html")] | #![doc(html_root_url = "https://hyperium.github.io/hyper/hyper/index.html")] | ||||||
| #![feature(core, collections, io, | #![feature(core, io, unsafe_destructor, into_cow, convert)] | ||||||
|            box_syntax, unsafe_destructor, into_cow, convert)] |  | ||||||
| #![deny(missing_docs)] | #![deny(missing_docs)] | ||||||
| #![cfg_attr(test, deny(warnings))] | #![cfg_attr(test, deny(warnings))] | ||||||
| #![cfg_attr(test, feature(alloc, test))] | #![cfg_attr(test, feature(alloc, test))] | ||||||
|   | |||||||
| @@ -355,20 +355,20 @@ mod tests { | |||||||
|     #[test] |     #[test] | ||||||
|     fn test_downcast_box_stream() { |     fn test_downcast_box_stream() { | ||||||
|         // FIXME: Use Type ascription |         // FIXME: Use Type ascription | ||||||
|         let stream: Box<NetworkStream + Send> = box MockStream::new(); |         let stream: Box<NetworkStream + Send> = Box::new(MockStream::new()); | ||||||
|  |  | ||||||
|         let mock = stream.downcast::<MockStream>().ok().unwrap(); |         let mock = stream.downcast::<MockStream>().ok().unwrap(); | ||||||
|         assert_eq!(mock, box MockStream::new()); |         assert_eq!(mock, Box::new(MockStream::new())); | ||||||
|  |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     #[test] |     #[test] | ||||||
|     fn test_downcast_unchecked_box_stream() { |     fn test_downcast_unchecked_box_stream() { | ||||||
|         // FIXME: Use Type ascription |         // FIXME: Use Type ascription | ||||||
|         let stream: Box<NetworkStream + Send> = box MockStream::new(); |         let stream: Box<NetworkStream + Send> = Box::new(MockStream::new()); | ||||||
|  |  | ||||||
|         let mock = unsafe { stream.downcast_unchecked::<MockStream>() }; |         let mock = unsafe { stream.downcast_unchecked::<MockStream>() }; | ||||||
|         assert_eq!(mock, box MockStream::new()); |         assert_eq!(mock, Box::new(MockStream::new())); | ||||||
|  |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,6 +1,5 @@ | |||||||
| use std::thread::{self, JoinGuard}; | use std::thread::{self, JoinGuard}; | ||||||
| use std::sync::mpsc; | use std::sync::mpsc; | ||||||
| use std::collections::VecMap; |  | ||||||
| use net::NetworkListener; | use net::NetworkListener; | ||||||
|  |  | ||||||
| pub struct ListenerPool<A: NetworkListener> { | pub struct ListenerPool<A: NetworkListener> { | ||||||
| @@ -24,22 +23,16 @@ impl<'a, A: NetworkListener + Send + 'a> ListenerPool<A> { | |||||||
|  |  | ||||||
|         let (super_tx, supervisor_rx) = mpsc::channel(); |         let (super_tx, supervisor_rx) = mpsc::channel(); | ||||||
|  |  | ||||||
|         let counter = &mut 0; |  | ||||||
|         let work = &work; |         let work = &work; | ||||||
|         let mut spawn = move || { |         let spawn = move |id| { | ||||||
|             let id = *counter; |             spawn_with(super_tx.clone(), work, self.acceptor.clone(), id) | ||||||
|             let guard = spawn_with(super_tx.clone(), work, self.acceptor.clone(), id); |  | ||||||
|             *counter += 1; |  | ||||||
|             (id, guard) |  | ||||||
|         }; |         }; | ||||||
|  |  | ||||||
|         // Go |         // Go | ||||||
|         let mut guards: VecMap<_> = (0..threads).map(|_| spawn()).collect(); |         let mut guards: Vec<_> = (0..threads).map(|id| spawn(id)).collect(); | ||||||
|  |  | ||||||
|         for id in supervisor_rx.iter() { |         for id in supervisor_rx.iter() { | ||||||
|             guards.remove(&id); |             guards[id] = spawn(id); | ||||||
|             let (id, guard) = spawn(); |  | ||||||
|             guards.insert(id, guard); |  | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user