From dba2644d1c1524653db4f70cfaa082da3e7d02ab Mon Sep 17 00:00:00 2001 From: Chris Morgan Date: Wed, 5 Mar 2014 10:30:57 +1100 Subject: [PATCH 01/20] Impl Show for RequestUri. --- src/http/server/request.rs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/http/server/request.rs b/src/http/server/request.rs index 65028aa..f0602c8 100644 --- a/src/http/server/request.rs +++ b/src/http/server/request.rs @@ -6,6 +6,7 @@ use std::io::{Stream, IoResult}; use std::io::net::ip::SocketAddr; use std::io::net::tcp::TcpStream; use std::str; +use std::fmt; use rfc2616::{CR, LF, SP}; use headers; use buffer::BufferedStream; @@ -282,6 +283,17 @@ impl FromStr for RequestUri { } } +impl fmt::Show for RequestUri { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + match *self { + Star => f.buf.write("*".as_bytes()), + AbsoluteUri(ref url) => write!(f.buf, "{}", url), + AbsolutePath(ref str) => f.buf.write(str.as_bytes()), + Authority(ref str) => f.buf.write(str.as_bytes()), + } + } +} + impl Request { /// Get a response from an open socket. From 8fe7e7d0987343ef542b02f56744e88166ebda08 Mon Sep 17 00:00:00 2001 From: Chris Morgan Date: Wed, 5 Mar 2014 10:51:27 +1100 Subject: [PATCH 02/20] s/[u8, ..N]/~[u8]/ in tests so it gets fmt::Show. --- src/http/memstream.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/http/memstream.rs b/src/http/memstream.rs index 27f3577..a0689e5 100644 --- a/src/http/memstream.rs +++ b/src/http/memstream.rs @@ -93,17 +93,17 @@ mod test { #[test] fn test_mem_reader_fake_stream() { let mut reader = MemReaderFakeStream::new(~[0, 1, 2, 3, 4, 5, 6, 7]); - let mut buf = []; + let mut buf = ~[]; assert_eq!(reader.read(buf), Ok(0)); assert_eq!(reader.tell(), Ok(0)); - let mut buf = [0]; + let mut buf = ~[0]; assert_eq!(reader.read(buf), Ok(1)); assert_eq!(reader.tell(), Ok(1)); - assert_eq!(buf, [0]); - let mut buf = [0, ..4]; + assert_eq!(buf, ~[0]); + let mut buf = ~[0, 0, 0, 0]; assert_eq!(reader.read(buf), Ok(4)); assert_eq!(reader.tell(), Ok(5)); - assert_eq!(buf, [1, 2, 3, 4]); + assert_eq!(buf, ~[1, 2, 3, 4]); assert_eq!(reader.read(buf), Ok(3)); assert_eq!(buf.slice(0, 3), [5, 6, 7]); assert_eq!(reader.read(buf).ok(), None); From c679052112d031eb27b6d3541fc4f7c9703e7c10 Mon Sep 17 00:00:00 2001 From: Chris Morgan Date: Wed, 5 Mar 2014 15:33:41 +1100 Subject: [PATCH 03/20] =?UTF-8?q?A=20little=20more=20[T,=20..N]=20?= =?UTF-8?q?=E2=86=92=20&[T].?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/http/memstream.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/http/memstream.rs b/src/http/memstream.rs index a0689e5..f14b507 100644 --- a/src/http/memstream.rs +++ b/src/http/memstream.rs @@ -105,7 +105,7 @@ mod test { assert_eq!(reader.tell(), Ok(5)); assert_eq!(buf, ~[1, 2, 3, 4]); assert_eq!(reader.read(buf), Ok(3)); - assert_eq!(buf.slice(0, 3), [5, 6, 7]); + assert_eq!(buf.slice(0, 3), &[5, 6, 7]); assert_eq!(reader.read(buf).ok(), None); } } From 648eee620753e81e074854f2dcae9ca472e8b395 Mon Sep 17 00:00:00 2001 From: Chris Morgan Date: Wed, 5 Mar 2014 16:30:37 +1100 Subject: [PATCH 04/20] Repair a couple of privacy warnings. --- src/codegen/branchify.rs | 2 +- src/http/headers/mod.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/codegen/branchify.rs b/src/codegen/branchify.rs index 0daf281..8d85241 100644 --- a/src/codegen/branchify.rs +++ b/src/codegen/branchify.rs @@ -3,7 +3,7 @@ use std::str::Chars; use std::io::IoResult; -struct ParseBranch { +pub struct ParseBranch { matches: ~[u8], result: Option<~str>, children: ~[ParseBranch], diff --git a/src/http/headers/mod.rs b/src/http/headers/mod.rs index 0dff909..536446a 100644 --- a/src/http/headers/mod.rs +++ b/src/http/headers/mod.rs @@ -151,7 +151,7 @@ pub struct HeaderValueByteIterator<'a, R> { next_byte: Option, at_start: bool, - state: HeaderValueByteIteratorState, + priv state: HeaderValueByteIteratorState, } impl<'a, R: Reader> HeaderValueByteIterator<'a, R> { From 26a1a2807b55e94826aaa6863e75ad2c2843ced8 Mon Sep 17 00:00:00 2001 From: Erik Hedvall Date: Mon, 10 Mar 2014 13:52:46 +0100 Subject: [PATCH 05/20] Rust update: DeepClone was removed --- src/http/headers/connection.rs | 2 +- src/http/headers/mod.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/http/headers/connection.rs b/src/http/headers/connection.rs index 3ae63cc..6f400f4 100644 --- a/src/http/headers/connection.rs +++ b/src/http/headers/connection.rs @@ -10,7 +10,7 @@ use headers::serialization_utils::normalise_header_name; /// A value for the Connection header. Note that should it be a ``Token``, the string is in /// normalised header case (e.g. "Keep-Alive"). -#[deriving(Clone, DeepClone, Eq)] +#[deriving(Clone, Eq)] pub enum Connection { Token(~str), Close, diff --git a/src/http/headers/mod.rs b/src/http/headers/mod.rs index 536446a..c704502 100644 --- a/src/http/headers/mod.rs +++ b/src/http/headers/mod.rs @@ -62,7 +62,7 @@ pub mod transfer_encoding; pub type DeltaSeconds = u64; -#[deriving(Clone, DeepClone, Eq)] +#[deriving(Clone, Eq)] pub enum ConsumeCommaLWSResult { CommaConsumed, EndOfValue, From 2a9530cbb3c728b07ba8767493c8f25408aa76c9 Mon Sep 17 00:00:00 2001 From: Chris Morgan Date: Fri, 14 Mar 2014 09:42:44 +1100 Subject: [PATCH 06/20] Remove ~str pattern (obsolete). --- src/codegen/main.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/codegen/main.rs b/src/codegen/main.rs index d43e13e..8faeb00 100644 --- a/src/codegen/main.rs +++ b/src/codegen/main.rs @@ -21,9 +21,9 @@ fn main() { 3 => { let output_dir = Path::new(args[2].as_slice()); - match args[1] { - ~"read_method.rs" => read_method::generate(&output_dir).unwrap(), - ~"status.rs" => status::generate(&output_dir).unwrap(), + match args[1].as_slice() { + "read_method.rs" => read_method::generate(&output_dir).unwrap(), + "status.rs" => status::generate(&output_dir).unwrap(), s => { println!("unknown thing-to-generate '{}'", s); os::set_exit_status(1); From 076e13a039b124b989792847a01843bfe099b91d Mon Sep 17 00:00:00 2001 From: Chris Morgan Date: Fri, 14 Mar 2014 10:16:40 +1100 Subject: [PATCH 07/20] Rename things from std::comm (mozilla/rust#12815). --- src/http/server/mod.rs | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/http/server/mod.rs b/src/http/server/mod.rs index 0304ef1..dcd8b8d 100644 --- a/src/http/server/mod.rs +++ b/src/http/server/mod.rs @@ -1,6 +1,5 @@ extern crate extra; -use std::comm::Chan; use std::io::{Listener, Acceptor}; use std::io::net::ip::SocketAddr; use time::precise_time_ns; @@ -37,9 +36,9 @@ pub trait Server: Send + Clone { Ok(acceptor) => acceptor, }; debug!("listening"); - let (perf_po, perf_ch) = Chan::new(); + let (perf_sender, perf_receiver) = channel(); spawn(proc() { - perf_dumper(perf_po); + perf_dumper(perf_receiver); }); loop { let time_start = precise_time_ns(); @@ -55,7 +54,7 @@ pub trait Server: Send + Clone { }, Ok(socket) => socket, }; - let child_perf_ch = perf_ch.clone(); + let child_perf_sender = perf_sender.clone(); let child_self = self.clone(); spawn(proc() { let mut time_start = time_start; @@ -103,7 +102,7 @@ pub trait Server: Send + Clone { Ok(_) => (), } let time_finished = precise_time_ns(); - child_perf_ch.send((time_start, time_spawned, time_request_made, time_response_made, time_finished)); + child_perf_sender.send((time_start, time_spawned, time_request_made, time_response_made, time_finished)); // Subsequent requests on this connection have no spawn time time_start = time_finished; @@ -128,7 +127,7 @@ pub struct Config { static PERF_DUMP_FREQUENCY : u64 = 10_000; /// Simple function to dump out perf stats every `PERF_DUMP_FREQUENCY` requests -fn perf_dumper(perf_po: Port<(u64, u64, u64, u64, u64)>) { +fn perf_dumper(perf_receiver: Receiver<(u64, u64, u64, u64, u64)>) { // Total durations let mut td_spawn = 0u64; let mut td_request = 0u64; @@ -137,7 +136,7 @@ fn perf_dumper(perf_po: Port<(u64, u64, u64, u64, u64)>) { let mut td_total = 0u64; let mut i = 0u64; loop { - let data = perf_po.recv(); + let data = perf_receiver.recv(); let (start, spawned, request_made, response_made, finished) = data; td_spawn += spawned - start; td_request += request_made - spawned; From 9b5858da4fdb6595009b6bb57521361e757980c2 Mon Sep 17 00:00:00 2001 From: Eunchong Yu Date: Sun, 16 Mar 2014 18:54:34 +0900 Subject: [PATCH 08/20] logging macros are moved out to the separate crate `log`. --- src/http/lib.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/http/lib.rs b/src/http/lib.rs index 6f7f77d..62d91cf 100644 --- a/src/http/lib.rs +++ b/src/http/lib.rs @@ -11,8 +11,10 @@ //#[deny(missing_doc)]; #[feature(macro_rules)]; +#[feature(phase)]; #[macro_escape]; +#[phase(syntax, link)] extern crate log; extern crate extra; extern crate time; extern crate collections; From 2fe82a466e4ab0e8ffb0127d3ba140d33c5ad8b7 Mon Sep 17 00:00:00 2001 From: Eunchong Yu Date: Sun, 16 Mar 2014 22:23:05 +0900 Subject: [PATCH 09/20] Replace ~[T] to std::vec_ng::Vec as possible --- src/examples/server/apache_fake/main.rs | 6 +++-- src/examples/server/hello_world/main.rs | 4 +++- src/examples/server/info/main.rs | 4 +++- src/examples/server/request_uri/main.rs | 6 +++-- src/http/buffer.rs | 24 +++++++++++--------- src/http/headers/accept_ranges.rs | 5 +++-- src/http/headers/connection.rs | 29 +++++++++++++------------ src/http/headers/content_type.rs | 17 ++++++++------- src/http/headers/mod.rs | 24 ++++++++++---------- src/http/headers/serialization_utils.rs | 16 ++++++++------ src/http/headers/transfer_encoding.rs | 7 +++--- src/http/server/response.rs | 3 ++- 12 files changed, 83 insertions(+), 62 deletions(-) diff --git a/src/examples/server/apache_fake/main.rs b/src/examples/server/apache_fake/main.rs index f1cc1d7..628883e 100644 --- a/src/examples/server/apache_fake/main.rs +++ b/src/examples/server/apache_fake/main.rs @@ -8,6 +8,8 @@ extern crate extra; extern crate time; extern crate http; +use std::vec_ng::Vec; + use std::io::net::ip::{SocketAddr, Ipv4Addr}; use std::io::Writer; @@ -44,13 +46,13 @@ impl Server for ApacheFakeServer { weak: false, opaque_tag: ~"501b29-b1-4a285ed47404a" }); w.headers.accept_ranges = Some(headers::accept_ranges::RangeUnits( - ~[headers::accept_ranges::Bytes])); + Vec::from_slice([headers::accept_ranges::Bytes]))); w.headers.content_length = Some(177); w.headers.vary = Some(~"Accept-Encoding"); w.headers.content_type = Some(headers::content_type::MediaType { type_: ~"text", subtype: ~"html", - parameters: ~[] + parameters: Vec::new() }); w.headers.extensions.insert(~"X-Pad", ~"avoid browser bug"); diff --git a/src/examples/server/hello_world/main.rs b/src/examples/server/hello_world/main.rs index fd9aefe..0b50b9b 100644 --- a/src/examples/server/hello_world/main.rs +++ b/src/examples/server/hello_world/main.rs @@ -6,6 +6,8 @@ extern crate extra; extern crate time; extern crate http; +use std::vec_ng::Vec; + use std::io::net::ip::{SocketAddr, Ipv4Addr}; use std::io::Writer; @@ -26,7 +28,7 @@ impl Server for HelloWorldServer { w.headers.content_type = Some(MediaType { type_: ~"text", subtype: ~"plain", - parameters: ~[(~"charset", ~"UTF-8")] + parameters: Vec::from_slice([(~"charset", ~"UTF-8")]) }); w.headers.server = Some(~"Example"); diff --git a/src/examples/server/info/main.rs b/src/examples/server/info/main.rs index 7fe400a..4562dea 100644 --- a/src/examples/server/info/main.rs +++ b/src/examples/server/info/main.rs @@ -7,6 +7,8 @@ extern crate extra; extern crate time; extern crate http; +use std::vec_ng::Vec; + use std::io::net::ip::{SocketAddr, Ipv4Addr}; use std::io::Writer; @@ -27,7 +29,7 @@ impl Server for InfoServer { w.headers.content_type = Some(MediaType { type_: ~"text", subtype: ~"html", - parameters: ~[(~"charset", ~"UTF-8")] + parameters: Vec::from_slice([(~"charset", ~"UTF-8")]) }); w.headers.server = Some(~"Rust Thingummy/0.0-pre"); w.write(bytes!("Rust HTTP server")).unwrap(); diff --git a/src/examples/server/request_uri/main.rs b/src/examples/server/request_uri/main.rs index 5cca89e..dbb56bf 100644 --- a/src/examples/server/request_uri/main.rs +++ b/src/examples/server/request_uri/main.rs @@ -10,6 +10,8 @@ extern crate extra; extern crate time; extern crate http; +use std::vec_ng::Vec; + use std::io::net::ip::{SocketAddr, Ipv4Addr}; use std::io::Writer; @@ -47,7 +49,7 @@ impl Server for RequestUriServer { (&Options, &Star) => { // Querying server capabilities. That's nice and simple. I can handle these methods: // (TODO: let user code override this, providing a default method.) - w.headers.allow = Some(~[Get, Head, Post, Put, Delete, Trace, Options, Connect, Patch]); + w.headers.allow = Some(Vec::from_slice([Get, Head, Post, Put, Delete, Trace, Options, Connect, Patch])); w.headers.content_length = Some(0); return; }, @@ -62,7 +64,7 @@ impl Server for RequestUriServer { w.headers.content_type = Some(MediaType { type_: ~"text", subtype: ~"html", - parameters: ~[] + parameters: Vec::new() }); w.write(bytes!("Rust HTTP server")).unwrap(); diff --git a/src/http/buffer.rs b/src/http/buffer.rs index 5971440..200b89b 100644 --- a/src/http/buffer.rs +++ b/src/http/buffer.rs @@ -2,6 +2,7 @@ use std::io::{IoResult, Stream}; use std::cmp::min; +use std::vec_ng::Vec; use std::vec; use std::num::ToStrRadix; @@ -12,12 +13,12 @@ static WRITE_BUF_SIZE: uint = 0x10000; pub struct BufferedStream { wrapped: T, - read_buffer: ~[u8], + read_buffer: Vec, // The current position in the buffer read_pos: uint, // The last valid position in the reader read_max: uint, - write_buffer: ~[u8], + write_buffer: Vec, write_len: uint, writing_chunked_body: bool, @@ -25,9 +26,9 @@ pub struct BufferedStream { impl BufferedStream { pub fn new(stream: T) -> BufferedStream { - let mut read_buffer = vec::with_capacity(READ_BUF_SIZE); + let mut read_buffer = Vec::with_capacity(READ_BUF_SIZE); unsafe { read_buffer.set_len(READ_BUF_SIZE); } - let mut write_buffer = vec::with_capacity(WRITE_BUF_SIZE); + let mut write_buffer = Vec::with_capacity(WRITE_BUF_SIZE); unsafe { write_buffer.set_len(WRITE_BUF_SIZE); } BufferedStream { wrapped: stream, @@ -52,14 +53,14 @@ impl BufferedStream { (0, _) => fail!("poke called when buffer is full"), (_, _) => self.read_pos -= 1, } - self.read_buffer[self.read_pos] = byte; + self.read_buffer.as_mut_slice()[self.read_pos] = byte; } #[inline] fn fill_buffer(&mut self) -> IoResult<()> { assert_eq!(self.read_pos, self.read_max); self.read_pos = 0; - match self.wrapped.read(self.read_buffer) { + match self.wrapped.read(self.read_buffer.as_mut_slice()) { Ok(i) => { self.read_max = i; Ok(()) @@ -80,7 +81,7 @@ impl BufferedStream { try!(self.fill_buffer()); } self.read_pos += 1; - Ok(self.read_buffer[self.read_pos - 1]) + Ok(self.read_buffer.as_slice()[self.read_pos - 1]) } } @@ -135,17 +136,20 @@ impl Writer for BufferedStream { try!(self.wrapped.write(bytes!("\r\n"))); } } else { - unsafe { self.write_buffer.mut_slice_from(self.write_len).copy_memory(buf); } + unsafe { + let len = self.write_buffer.len(); + self.write_buffer.mut_slice(self.write_len, len).copy_memory(buf); + } self.write_len += buf.len(); if self.write_len == self.write_buffer.len() { if self.writing_chunked_body { let s = format!("{}\r\n", self.write_len.to_str_radix(16)); try!(self.wrapped.write(s.as_bytes())); - try!(self.wrapped.write(self.write_buffer)); + try!(self.wrapped.write(self.write_buffer.as_slice())); try!(self.wrapped.write(bytes!("\r\n"))); } else { - try!(self.wrapped.write(self.write_buffer)); + try!(self.wrapped.write(self.write_buffer.as_slice())); } self.write_len = 0; } diff --git a/src/http/headers/accept_ranges.rs b/src/http/headers/accept_ranges.rs index c14c6f6..44b36b9 100644 --- a/src/http/headers/accept_ranges.rs +++ b/src/http/headers/accept_ranges.rs @@ -1,5 +1,6 @@ //! The Accept-Ranges request header, defined in RFC 2616, Section 14.5. +use std::vec_ng::Vec; use std::io::IoResult; use std::ascii::StrAsciiExt; @@ -13,7 +14,7 @@ pub enum RangeUnit { #[deriving(Clone,Eq)] // RFC 2616: acceptable-ranges = 1#range-unit | "none" pub enum AcceptableRanges { - RangeUnits(~[RangeUnit]), + RangeUnits(Vec), NoAcceptableRanges, } @@ -23,7 +24,7 @@ static BYTES: &'static [u8] = bytes!("bytes"); impl super::HeaderConvertible for AcceptableRanges { fn from_stream(reader: &mut super::HeaderValueByteIterator) -> Option { - let mut range_units = ~[]; + let mut range_units = Vec::new(); loop { match reader.read_token() { Some(token) => { diff --git a/src/http/headers/connection.rs b/src/http/headers/connection.rs index 6f400f4..ae2b5c0 100644 --- a/src/http/headers/connection.rs +++ b/src/http/headers/connection.rs @@ -58,24 +58,25 @@ impl super::HeaderConvertible for Connection { #[test] fn test_connection() { + use std::vec_ng::Vec; use headers::test_utils::{assert_conversion_correct, assert_interpretation_correct, assert_invalid}; - assert_conversion_correct("close", ~[Close]); - assert_conversion_correct("Foo", ~[Token(~"Foo")]); - assert_conversion_correct("Foo, Keep-Alive", ~[Token(~"Foo"), Token(~"Keep-Alive")]); - assert_conversion_correct("Foo, close", ~[Token(~"Foo"), Close]); - assert_conversion_correct("close, Bar", ~[Close, Token(~"Bar")]); + assert_conversion_correct("close", Vec::from_slice([Close])); + assert_conversion_correct("Foo", Vec::from_slice([Token(~"Foo")])); + assert_conversion_correct("Foo, Keep-Alive", Vec::from_slice([Token(~"Foo"), Token(~"Keep-Alive")])); + assert_conversion_correct("Foo, close", Vec::from_slice([Token(~"Foo"), Close])); + assert_conversion_correct("close, Bar", Vec::from_slice([Close, Token(~"Bar")])); - assert_interpretation_correct("close", ~[Close]); - assert_interpretation_correct("foo", ~[Token(~"Foo")]); - assert_interpretation_correct("close \r\n , keep-ALIVE", ~[Close, Token(~"Keep-Alive")]); - assert_interpretation_correct("foo,close", ~[Token(~"Foo"), Close]); - assert_interpretation_correct("close, bar", ~[Close, Token(~"Bar")]); + assert_interpretation_correct("close", Vec::from_slice([Close])); + assert_interpretation_correct("foo", Vec::from_slice([Token(~"Foo")])); + assert_interpretation_correct("close \r\n , keep-ALIVE", Vec::from_slice([Close, Token(~"Keep-Alive")])); + assert_interpretation_correct("foo,close", Vec::from_slice([Token(~"Foo"), Close])); + assert_interpretation_correct("close, bar", Vec::from_slice([Close, Token(~"Bar")])); assert_interpretation_correct("CLOSE", Close); - assert_invalid::<~[Connection]>("foo bar"); - assert_invalid::<~[Connection]>("foo bar"); - assert_invalid::<~[Connection]>("foo, bar baz"); - assert_invalid::<~[Connection]>("foo, , baz"); + assert_invalid::>("foo bar"); + assert_invalid::>("foo bar"); + assert_invalid::>("foo, bar baz"); + assert_invalid::>("foo, , baz"); } diff --git a/src/http/headers/content_type.rs b/src/http/headers/content_type.rs index 6ea8404..4136e2b 100644 --- a/src/http/headers/content_type.rs +++ b/src/http/headers/content_type.rs @@ -1,5 +1,6 @@ //! The Content-Type entity header, defined in RFC 2616, Section 14.17. use headers::serialization_utils::{push_parameters, WriterUtil}; +use std::vec_ng::Vec; use std::io::IoResult; use std::fmt; @@ -7,10 +8,10 @@ use std::fmt; pub struct MediaType { type_: ~str, subtype: ~str, - parameters: ~[(~str, ~str)], + parameters: Vec<(~str, ~str)>, } -pub fn MediaType(type_: ~str, subtype: ~str, parameters: ~[(~str, ~str)]) -> MediaType { +pub fn MediaType(type_: ~str, subtype: ~str, parameters: Vec<(~str, ~str)>) -> MediaType { MediaType { type_: type_, subtype: subtype, @@ -28,7 +29,7 @@ impl fmt::Show for MediaType { //s.push_parameters(self.parameters); //s let s = format!("{}/{}", self.type_, self.subtype); - f.buf.write(push_parameters(s, self.parameters).as_bytes()) + f.buf.write(push_parameters(s, self.parameters.as_slice()).as_bytes()) } } @@ -63,7 +64,7 @@ impl super::HeaderConvertible for MediaType { try!(writer.write_token(self.type_)); try!(writer.write(['/' as u8])); try!(writer.write_token(self.subtype)); - writer.write_parameters(self.parameters) + writer.write_parameters(self.parameters.as_slice()) } fn http_value(&self) -> ~str { @@ -75,13 +76,13 @@ impl super::HeaderConvertible for MediaType { fn test_content_type() { use headers::test_utils::{assert_conversion_correct, assert_interpretation_correct, assert_invalid}; - assert_conversion_correct("type/subtype", MediaType(~"type", ~"subtype", ~[])); + assert_conversion_correct("type/subtype", MediaType(~"type", ~"subtype", Vec::new())); assert_conversion_correct("type/subtype;key=value", - MediaType(~"type", ~"subtype", ~[(~"key", ~"value")])); + MediaType(~"type", ~"subtype", Vec::from_slice([(~"key", ~"value")]))); assert_conversion_correct("type/subtype;key=value;q=0.1", - MediaType(~"type", ~"subtype", ~[(~"key", ~"value"), (~"q", ~"0.1")])); + MediaType(~"type", ~"subtype", Vec::from_slice([(~"key", ~"value"), (~"q", ~"0.1")]))); assert_interpretation_correct("type/subtype ; key = value ; q = 0.1", - MediaType(~"type", ~"subtype", ~[(~"key", ~"value"), (~"q", ~"0.1")])); + MediaType(~"type", ~"subtype", Vec::from_slice([(~"key", ~"value"), (~"q", ~"0.1")]))); assert_invalid::(""); assert_invalid::("/"); diff --git a/src/http/headers/mod.rs b/src/http/headers/mod.rs index c704502..7c90462 100644 --- a/src/http/headers/mod.rs +++ b/src/http/headers/mod.rs @@ -4,6 +4,7 @@ //! known HTTP headers are type checked, rather than being dealt with as strings all the time. Only //! unknown headers are stored in a map in the traditional way. +use std::vec_ng::Vec; use std::io::IoResult; use time::{Tm, strptime}; use extra::url::Url; @@ -332,8 +333,8 @@ impl<'a, R: Reader> HeaderValueByteIterator<'a, R> { /// /// The return value ``None`` is reserved for syntax errors in parameters that exist; a mere /// absense of parameters will lead to returning an empty vector instead. - fn read_parameters(&mut self) -> Option<~[(~str, ~str)]> { - let mut result = ~[]; + fn read_parameters(&mut self) -> Option> { + let mut result = Vec::new(); loop { match self.next() { //This catches the LWS after the last ';', and can probably be replaced with @@ -556,9 +557,9 @@ pub trait HeaderConvertible: Eq + Clone { /// comma. pub trait CommaListHeaderConvertible: HeaderConvertible {} -impl HeaderConvertible for ~[T] { - fn from_stream(reader: &mut HeaderValueByteIterator) -> Option<~[T]> { - let mut result = ~[]; +impl HeaderConvertible for Vec { + fn from_stream(reader: &mut HeaderValueByteIterator) -> Option> { + let mut result = Vec::new(); loop { match HeaderConvertible::from_stream(reader) { Some(h) => result.push(h), @@ -871,6 +872,7 @@ macro_rules! headers_mod { $attr; #[allow(unused_imports)]; + use std::vec_ng::Vec; use std::io::IoResult; use extra; use time; @@ -1013,11 +1015,11 @@ headers_mod! { // RFC 2616, Section 4.5: General Header Fields 0, "Cache-Control", "Cache-Control", CacheControl, cache_control, ~str; - 1, "Connection", "Connection", Connection, connection, ~[headers::connection::Connection]; + 1, "Connection", "Connection", Connection, connection, Vec; 2, "Date", "Date", Date, date, time::Tm; 3, "Pragma", "Pragma", Pragma, pragma, ~str; 4, "Trailer", "Trailer", Trailer, trailer, ~str; - 5, "Transfer-Encoding", "Transfer-Encoding", TransferEncoding, transfer_encoding, ~[headers::transfer_encoding::TransferCoding]; + 5, "Transfer-Encoding", "Transfer-Encoding", TransferEncoding, transfer_encoding, Vec; 6, "Upgrade", "Upgrade", Upgrade, upgrade, ~str; 7, "Via", "Via", Via, via, ~str; 8, "Warning", "Warning", Warning, warning, ~str; @@ -1044,7 +1046,7 @@ headers_mod! { 27, "User-Agent", "User-Agent", UserAgent, user_agent, ~str; // RFC 2616, Section 7.1: Entity Header Fields - 28, "Allow", "Allow", Allow, allow, ~[::method::Method]; + 28, "Allow", "Allow", Allow, allow, Vec<::method::Method>; 29, "Content-Encoding", "Content-Encoding", ContentEncoding, content_encoding, ~str; 30, "Content-Language", "Content-Language", ContentLanguage, content_language, ~str; 31, "Content-Length", "Content-Length", ContentLength, content_length, uint; @@ -1064,11 +1066,11 @@ headers_mod! { // RFC 2616, Section 4.5: General Header Fields 0, "Cache-Control", "Cache-Control", CacheControl, cache_control, ~str; - 1, "Connection", "Connection", Connection, connection, ~[headers::connection::Connection]; + 1, "Connection", "Connection", Connection, connection, Vec; 2, "Date", "Date", Date, date, time::Tm; 3, "Pragma", "Pragma", Pragma, pragma, ~str; 4, "Trailer", "Trailer", Trailer, trailer, ~str; - 5, "Transfer-Encoding", "Transfer-Encoding", TransferEncoding, transfer_encoding, ~[headers::transfer_encoding::TransferCoding]; + 5, "Transfer-Encoding", "Transfer-Encoding", TransferEncoding, transfer_encoding, Vec; 6, "Upgrade", "Upgrade", Upgrade, upgrade, ~str; 7, "Via", "Via", Via, via, ~str; 8, "Warning", "Warning", Warning, warning, ~str; @@ -1086,7 +1088,7 @@ headers_mod! { 18, "WWW-Authenticate", "Www-Authenticate", WwwAuthenticate, www_authenticate, ~str; // RFC 2616, Section 7.1: Entity Header Fields - 19, "Allow", "Allow", Allow, allow, ~[::method::Method]; + 19, "Allow", "Allow", Allow, allow, Vec<::method::Method>; 20, "Content-Encoding", "Content-Encoding", ContentEncoding, content_encoding, ~str; 21, "Content-Language", "Content-Language", ContentLanguage, content_language, ~str; 22, "Content-Length", "Content-Length", ContentLength, content_length, uint; diff --git a/src/http/headers/serialization_utils.rs b/src/http/headers/serialization_utils.rs index 95195bc..bc48c43 100644 --- a/src/http/headers/serialization_utils.rs +++ b/src/http/headers/serialization_utils.rs @@ -1,5 +1,6 @@ //! Utility functions for assisting with conversion of headers from and to the HTTP text form. +use std::vec_ng::Vec; use std::vec; use std::ascii::Ascii; use std::io::IoResult; @@ -45,7 +46,7 @@ pub fn normalise_header_name(name: &str) -> ~str { /// ~~~ .{rust} /// assert_eq!(comma_split(" en;q=0.8, en_AU, text/html"), ["en;q=0.8", "en_AU", "text/html"]) /// ~~~ -pub fn comma_split(value: &str) -> ~[~str] { +pub fn comma_split(value: &str) -> Vec<~str> { value.split(',').map(|w| w.trim_left().to_owned()).collect() } @@ -216,6 +217,7 @@ pub fn push_parameters(mut s: ~str, parameters: &[(K, V)]) -> ~s #[cfg(test)] mod test { + use std::vec_ng::Vec; use super::{normalise_header_name, comma_split, comma_split_iter, comma_join, push_quality, push_parameter, push_parameters, push_maybe_quoted_string, push_quoted_string, maybe_quoted_string, quoted_string, @@ -236,17 +238,17 @@ mod test { #[test] fn test_comma_split() { // Simple 0-element case - assert_eq!(comma_split(""), ~[~""]); + assert_eq!(comma_split(""), Vec::from_slice([~""])); // Simple 1-element case - assert_eq!(comma_split("foo"), ~[~"foo"]); + assert_eq!(comma_split("foo"), Vec::from_slice([~"foo"])); // Simple 2-element case - assert_eq!(comma_split("foo,bar"), ~[~"foo", ~"bar"]); + assert_eq!(comma_split("foo,bar"), Vec::from_slice([~"foo", ~"bar"])); // Simple >2-element case - assert_eq!(comma_split("foo,bar,baz,quux"), ~[~"foo", ~"bar", ~"baz", ~"quux"]); + assert_eq!(comma_split("foo,bar,baz,quux"), Vec::from_slice([~"foo", ~"bar", ~"baz", ~"quux"])); // Doesn't handle quoted-string intelligently - assert_eq!(comma_split("\"foo,bar\",baz"), ~[~"\"foo", ~"bar\"", ~"baz"]); + assert_eq!(comma_split("\"foo,bar\",baz"), Vec::from_slice([~"\"foo", ~"bar\"", ~"baz"])); // Doesn't do right trimming, but does left - assert_eq!(comma_split(" foo;q=0.8 , bar/* "), ~[~"foo;q=0.8 ", ~"bar/* "]); + assert_eq!(comma_split(" foo;q=0.8 , bar/* "), Vec::from_slice([~"foo;q=0.8 ", ~"bar/* "])); } #[test] diff --git a/src/http/headers/transfer_encoding.rs b/src/http/headers/transfer_encoding.rs index 9afd27d..c92dbd3 100644 --- a/src/http/headers/transfer_encoding.rs +++ b/src/http/headers/transfer_encoding.rs @@ -2,6 +2,7 @@ //! //! Transfer-Encoding = "Transfer-Encoding" ":" 1#transfer-coding +use std::vec_ng::Vec; use std::ascii::StrAsciiExt; use std::io::IoResult; use headers::serialization_utils::{WriterUtil, push_parameters}; @@ -13,7 +14,7 @@ use headers::serialization_utils::{WriterUtil, push_parameters}; #[deriving(Clone,Eq)] pub enum TransferCoding { Chunked, - TransferExtension(~str, ~[(~str, ~str)]), + TransferExtension(~str, Vec<(~str, ~str)>), } impl super::CommaListHeaderConvertible for TransferCoding {} @@ -42,7 +43,7 @@ impl super::HeaderConvertible for TransferCoding { Chunked => writer.write(bytes!("chunked")), TransferExtension(ref token, ref parameters) => { try!(writer.write_token(*token)); - writer.write_parameters(*parameters) + writer.write_parameters(parameters.as_slice()) } } } @@ -52,7 +53,7 @@ impl super::HeaderConvertible for TransferCoding { Chunked => ~"chunked", TransferExtension(ref token, ref parameters) => { let out = token.to_owned(); - push_parameters(out, *parameters) + push_parameters(out, parameters.as_slice()) } } } diff --git a/src/http/server/response.rs b/src/http/server/response.rs index 51385e5..978e0df 100644 --- a/src/http/server/response.rs +++ b/src/http/server/response.rs @@ -1,3 +1,4 @@ +use std::vec_ng::Vec; use std::io::IoResult; use std::io::net::tcp::TcpStream; @@ -84,7 +85,7 @@ impl<'a> ResponseWriter<'a> { // apply. In such a case, chunked MUST come last. This way prevents it from being extensible // thus, which is suboptimal. if self.headers.content_length == None { - self.headers.transfer_encoding = Some(~[Chunked]); + self.headers.transfer_encoding = Some(Vec::from_slice([Chunked])); } else { self.headers.transfer_encoding = None; } From 61e8183a8fb770e7d3c7398dcba35be34e73da7e Mon Sep 17 00:00:00 2001 From: Eunchong Yu Date: Mon, 17 Mar 2014 00:12:54 +0900 Subject: [PATCH 10/20] Replace Vec::from_slice([...]) to vec!(...) macro to improve readability and effecienty. Thanks to @Ogeon. --- src/examples/server/apache_fake/main.rs | 2 +- src/examples/server/hello_world/main.rs | 2 +- src/examples/server/info/main.rs | 2 +- src/examples/server/request_uri/main.rs | 2 +- src/http/headers/connection.rs | 20 ++++++++++---------- src/http/headers/content_type.rs | 6 +++--- src/http/headers/serialization_utils.rs | 12 ++++++------ src/http/server/response.rs | 2 +- 8 files changed, 24 insertions(+), 24 deletions(-) diff --git a/src/examples/server/apache_fake/main.rs b/src/examples/server/apache_fake/main.rs index 628883e..afd9f62 100644 --- a/src/examples/server/apache_fake/main.rs +++ b/src/examples/server/apache_fake/main.rs @@ -46,7 +46,7 @@ impl Server for ApacheFakeServer { weak: false, opaque_tag: ~"501b29-b1-4a285ed47404a" }); w.headers.accept_ranges = Some(headers::accept_ranges::RangeUnits( - Vec::from_slice([headers::accept_ranges::Bytes]))); + vec!(headers::accept_ranges::Bytes))); w.headers.content_length = Some(177); w.headers.vary = Some(~"Accept-Encoding"); w.headers.content_type = Some(headers::content_type::MediaType { diff --git a/src/examples/server/hello_world/main.rs b/src/examples/server/hello_world/main.rs index 0b50b9b..b9f7e68 100644 --- a/src/examples/server/hello_world/main.rs +++ b/src/examples/server/hello_world/main.rs @@ -28,7 +28,7 @@ impl Server for HelloWorldServer { w.headers.content_type = Some(MediaType { type_: ~"text", subtype: ~"plain", - parameters: Vec::from_slice([(~"charset", ~"UTF-8")]) + parameters: vec!((~"charset", ~"UTF-8")) }); w.headers.server = Some(~"Example"); diff --git a/src/examples/server/info/main.rs b/src/examples/server/info/main.rs index 4562dea..b77f08c 100644 --- a/src/examples/server/info/main.rs +++ b/src/examples/server/info/main.rs @@ -29,7 +29,7 @@ impl Server for InfoServer { w.headers.content_type = Some(MediaType { type_: ~"text", subtype: ~"html", - parameters: Vec::from_slice([(~"charset", ~"UTF-8")]) + parameters: vec!((~"charset", ~"UTF-8")) }); w.headers.server = Some(~"Rust Thingummy/0.0-pre"); w.write(bytes!("Rust HTTP server")).unwrap(); diff --git a/src/examples/server/request_uri/main.rs b/src/examples/server/request_uri/main.rs index dbb56bf..d1fd53e 100644 --- a/src/examples/server/request_uri/main.rs +++ b/src/examples/server/request_uri/main.rs @@ -49,7 +49,7 @@ impl Server for RequestUriServer { (&Options, &Star) => { // Querying server capabilities. That's nice and simple. I can handle these methods: // (TODO: let user code override this, providing a default method.) - w.headers.allow = Some(Vec::from_slice([Get, Head, Post, Put, Delete, Trace, Options, Connect, Patch])); + w.headers.allow = Some(vec!(Get, Head, Post, Put, Delete, Trace, Options, Connect, Patch)); w.headers.content_length = Some(0); return; }, diff --git a/src/http/headers/connection.rs b/src/http/headers/connection.rs index ae2b5c0..bc892f9 100644 --- a/src/http/headers/connection.rs +++ b/src/http/headers/connection.rs @@ -62,17 +62,17 @@ fn test_connection() { use headers::test_utils::{assert_conversion_correct, assert_interpretation_correct, assert_invalid}; - assert_conversion_correct("close", Vec::from_slice([Close])); - assert_conversion_correct("Foo", Vec::from_slice([Token(~"Foo")])); - assert_conversion_correct("Foo, Keep-Alive", Vec::from_slice([Token(~"Foo"), Token(~"Keep-Alive")])); - assert_conversion_correct("Foo, close", Vec::from_slice([Token(~"Foo"), Close])); - assert_conversion_correct("close, Bar", Vec::from_slice([Close, Token(~"Bar")])); + assert_conversion_correct("close", vec!(Close)); + assert_conversion_correct("Foo", vec!(Token(~"Foo"))); + assert_conversion_correct("Foo, Keep-Alive", vec!(Token(~"Foo"), Token(~"Keep-Alive"))); + assert_conversion_correct("Foo, close", vec!(Token(~"Foo"), Close)); + assert_conversion_correct("close, Bar", vec!(Close, Token(~"Bar"))); - assert_interpretation_correct("close", Vec::from_slice([Close])); - assert_interpretation_correct("foo", Vec::from_slice([Token(~"Foo")])); - assert_interpretation_correct("close \r\n , keep-ALIVE", Vec::from_slice([Close, Token(~"Keep-Alive")])); - assert_interpretation_correct("foo,close", Vec::from_slice([Token(~"Foo"), Close])); - assert_interpretation_correct("close, bar", Vec::from_slice([Close, Token(~"Bar")])); + assert_interpretation_correct("close", vec!(Close)); + assert_interpretation_correct("foo", vec!(Token(~"Foo"))); + assert_interpretation_correct("close \r\n , keep-ALIVE", vec!(Close, Token(~"Keep-Alive"))); + assert_interpretation_correct("foo,close", vec!(Token(~"Foo"), Close)); + assert_interpretation_correct("close, bar", vec!(Close, Token(~"Bar"))); assert_interpretation_correct("CLOSE", Close); assert_invalid::>("foo bar"); diff --git a/src/http/headers/content_type.rs b/src/http/headers/content_type.rs index 4136e2b..55af084 100644 --- a/src/http/headers/content_type.rs +++ b/src/http/headers/content_type.rs @@ -78,11 +78,11 @@ fn test_content_type() { assert_invalid}; assert_conversion_correct("type/subtype", MediaType(~"type", ~"subtype", Vec::new())); assert_conversion_correct("type/subtype;key=value", - MediaType(~"type", ~"subtype", Vec::from_slice([(~"key", ~"value")]))); + MediaType(~"type", ~"subtype", vec!((~"key", ~"value")))); assert_conversion_correct("type/subtype;key=value;q=0.1", - MediaType(~"type", ~"subtype", Vec::from_slice([(~"key", ~"value"), (~"q", ~"0.1")]))); + MediaType(~"type", ~"subtype", vec!((~"key", ~"value"), (~"q", ~"0.1")))); assert_interpretation_correct("type/subtype ; key = value ; q = 0.1", - MediaType(~"type", ~"subtype", Vec::from_slice([(~"key", ~"value"), (~"q", ~"0.1")]))); + MediaType(~"type", ~"subtype", vec!((~"key", ~"value"), (~"q", ~"0.1")))); assert_invalid::(""); assert_invalid::("/"); diff --git a/src/http/headers/serialization_utils.rs b/src/http/headers/serialization_utils.rs index bc48c43..c3ac7fd 100644 --- a/src/http/headers/serialization_utils.rs +++ b/src/http/headers/serialization_utils.rs @@ -238,17 +238,17 @@ mod test { #[test] fn test_comma_split() { // Simple 0-element case - assert_eq!(comma_split(""), Vec::from_slice([~""])); + assert_eq!(comma_split(""), vec!(~"")); // Simple 1-element case - assert_eq!(comma_split("foo"), Vec::from_slice([~"foo"])); + assert_eq!(comma_split("foo"), vec!(~"foo")); // Simple 2-element case - assert_eq!(comma_split("foo,bar"), Vec::from_slice([~"foo", ~"bar"])); + assert_eq!(comma_split("foo,bar"), vec!(~"foo", ~"bar")); // Simple >2-element case - assert_eq!(comma_split("foo,bar,baz,quux"), Vec::from_slice([~"foo", ~"bar", ~"baz", ~"quux"])); + assert_eq!(comma_split("foo,bar,baz,quux"), vec!(~"foo", ~"bar", ~"baz", ~"quux")); // Doesn't handle quoted-string intelligently - assert_eq!(comma_split("\"foo,bar\",baz"), Vec::from_slice([~"\"foo", ~"bar\"", ~"baz"])); + assert_eq!(comma_split("\"foo,bar\",baz"), vec!(~"\"foo", ~"bar\"", ~"baz")); // Doesn't do right trimming, but does left - assert_eq!(comma_split(" foo;q=0.8 , bar/* "), Vec::from_slice([~"foo;q=0.8 ", ~"bar/* "])); + assert_eq!(comma_split(" foo;q=0.8 , bar/* "), vec!(~"foo;q=0.8 ", ~"bar/* ")); } #[test] diff --git a/src/http/server/response.rs b/src/http/server/response.rs index 978e0df..16a23f5 100644 --- a/src/http/server/response.rs +++ b/src/http/server/response.rs @@ -85,7 +85,7 @@ impl<'a> ResponseWriter<'a> { // apply. In such a case, chunked MUST come last. This way prevents it from being extensible // thus, which is suboptimal. if self.headers.content_length == None { - self.headers.transfer_encoding = Some(Vec::from_slice([Chunked])); + self.headers.transfer_encoding = Some(vec!(Chunked)); } else { self.headers.transfer_encoding = None; } From 06a2a8a29b43f87c94908251499c8ff373afeb9a Mon Sep 17 00:00:00 2001 From: James Lee Date: Sat, 15 Mar 2014 20:48:30 -0400 Subject: [PATCH 11/20] Rust update: `libextra` is deleted. `extra::url` has moved out to a separate library --- src/examples/server/apache_fake/main.rs | 1 - src/examples/server/hello_world/main.rs | 1 - src/examples/server/info/main.rs | 1 - src/examples/server/request_uri/main.rs | 1 - src/http/client/request.rs | 5 ++--- src/http/headers/mod.rs | 5 ++--- src/http/lib.rs | 2 +- src/http/server/mod.rs | 2 -- src/http/server/request.rs | 2 +- 9 files changed, 6 insertions(+), 14 deletions(-) diff --git a/src/examples/server/apache_fake/main.rs b/src/examples/server/apache_fake/main.rs index f1cc1d7..fa17ae7 100644 --- a/src/examples/server/apache_fake/main.rs +++ b/src/examples/server/apache_fake/main.rs @@ -4,7 +4,6 @@ #[crate_id = "apache_fake"]; -extern crate extra; extern crate time; extern crate http; diff --git a/src/examples/server/hello_world/main.rs b/src/examples/server/hello_world/main.rs index fd9aefe..72989aa 100644 --- a/src/examples/server/hello_world/main.rs +++ b/src/examples/server/hello_world/main.rs @@ -2,7 +2,6 @@ #[crate_id = "hello_world"]; -extern crate extra; extern crate time; extern crate http; diff --git a/src/examples/server/info/main.rs b/src/examples/server/info/main.rs index 7fe400a..9329191 100644 --- a/src/examples/server/info/main.rs +++ b/src/examples/server/info/main.rs @@ -3,7 +3,6 @@ #[crate_id = "info"]; -extern crate extra; extern crate time; extern crate http; diff --git a/src/examples/server/request_uri/main.rs b/src/examples/server/request_uri/main.rs index 5cca89e..14b22f7 100644 --- a/src/examples/server/request_uri/main.rs +++ b/src/examples/server/request_uri/main.rs @@ -6,7 +6,6 @@ #[crate_id = "request_uri"]; -extern crate extra; extern crate time; extern crate http; diff --git a/src/http/client/request.rs b/src/http/client/request.rs index d8fcf06..97a67ee 100644 --- a/src/http/client/request.rs +++ b/src/http/client/request.rs @@ -35,9 +35,8 @@ let response = match request.read_response() { ``` */ - -use extra::url::Url; -use extra::url; +use url; +use url::Url; use method::Method; use std::io::{IoError, IoResult}; use std::io::net::get_host_addresses; diff --git a/src/http/headers/mod.rs b/src/http/headers/mod.rs index c704502..57b8cae 100644 --- a/src/http/headers/mod.rs +++ b/src/http/headers/mod.rs @@ -4,9 +4,9 @@ //! known HTTP headers are type checked, rather than being dealt with as strings all the time. Only //! unknown headers are stored in a map in the traditional way. +use url::Url; use std::io::IoResult; use time::{Tm, strptime}; -use extra::url::Url; use rfc2616::{is_token_item, is_separator, CR, LF, SP, HT, COLON}; use method::Method; @@ -872,7 +872,6 @@ macro_rules! headers_mod { #[allow(unused_imports)]; use std::io::IoResult; - use extra; use time; use collections::treemap::{TreeMap, Entries}; use headers; @@ -1078,7 +1077,7 @@ headers_mod! { 10, "Accept-Ranges", "Accept-Ranges", AcceptRanges, accept_ranges, headers::accept_ranges::AcceptableRanges; 11, "Age", "Age", Age, age, ~str; 12, "ETag", "Etag", ETag, etag, headers::etag::EntityTag; - 13, "Location", "Location", Location, location, extra::url::Url; + 13, "Location", "Location", Location, location, ::url::Url; 14, "Proxy-Authenticate", "Proxy-Authenticate", ProxyAuthenticate, proxy_authenticate, ~str; 15, "Retry-After", "Retry-After", RetryAfter, retry_after, ~str; 16, "Server", "Server", Server, server, ~str; diff --git a/src/http/lib.rs b/src/http/lib.rs index 6f7f77d..797045d 100644 --- a/src/http/lib.rs +++ b/src/http/lib.rs @@ -13,7 +13,7 @@ #[feature(macro_rules)]; #[macro_escape]; -extern crate extra; +extern crate url; extern crate time; extern crate collections; diff --git a/src/http/server/mod.rs b/src/http/server/mod.rs index dcd8b8d..410d71c 100644 --- a/src/http/server/mod.rs +++ b/src/http/server/mod.rs @@ -1,5 +1,3 @@ -extern crate extra; - use std::io::{Listener, Acceptor}; use std::io::net::ip::SocketAddr; use time::precise_time_ns; diff --git a/src/http/server/request.rs b/src/http/server/request.rs index f0602c8..336a914 100644 --- a/src/http/server/request.rs +++ b/src/http/server/request.rs @@ -1,4 +1,4 @@ -use extra::url::Url; +use url::Url; use method::{Method, Options}; use status; use std::from_str::FromStr; From 244d772b68e83c4fddf674454e3ac1e49b74e875 Mon Sep 17 00:00:00 2001 From: Erik Hedvall Date: Fri, 21 Mar 2014 10:27:09 +0100 Subject: [PATCH 12/20] Rust update: `std::vec_ng`->`std::vec` and `std::vec`->`std::slice` + removed unused imports --- src/codegen/status.rs | 4 ++-- src/examples/server/apache_fake/main.rs | 2 +- src/examples/server/hello_world/main.rs | 2 -- src/examples/server/info/main.rs | 2 -- src/examples/server/request_uri/main.rs | 2 +- src/http/buffer.rs | 6 +++--- src/http/headers/accept_ranges.rs | 2 +- src/http/headers/connection.rs | 2 +- src/http/headers/content_type.rs | 2 +- src/http/headers/mod.rs | 4 ++-- src/http/headers/serialization_utils.rs | 7 +++---- src/http/headers/transfer_encoding.rs | 2 +- src/http/server/response.rs | 1 - 13 files changed, 16 insertions(+), 22 deletions(-) diff --git a/src/codegen/status.rs b/src/codegen/status.rs index f9e0690..b231044 100644 --- a/src/codegen/status.rs +++ b/src/codegen/status.rs @@ -9,7 +9,7 @@ use collections::hashmap::HashSet; use std::ascii::StrAsciiExt; -use std::vec; +use std::slice; use std::io::IoResult; use super::get_writer; @@ -52,7 +52,7 @@ impl Status { /// "ImATeaPot" fn camel_case(msg: &str) -> ~str { let msg = msg.replace("-", " ").replace("'", ""); - let mut result: ~[Ascii] = vec::with_capacity(msg.len()); + let mut result: ~[Ascii] = slice::with_capacity(msg.len()); let mut capitalise = true; for c in msg.chars() { let c = match capitalise { diff --git a/src/examples/server/apache_fake/main.rs b/src/examples/server/apache_fake/main.rs index cecd3d2..f4dad3a 100644 --- a/src/examples/server/apache_fake/main.rs +++ b/src/examples/server/apache_fake/main.rs @@ -7,7 +7,7 @@ extern crate time; extern crate http; -use std::vec_ng::Vec; +use std::vec::Vec; use std::io::net::ip::{SocketAddr, Ipv4Addr}; use std::io::Writer; diff --git a/src/examples/server/hello_world/main.rs b/src/examples/server/hello_world/main.rs index a5ff7ec..3cdb66a 100644 --- a/src/examples/server/hello_world/main.rs +++ b/src/examples/server/hello_world/main.rs @@ -5,8 +5,6 @@ extern crate time; extern crate http; -use std::vec_ng::Vec; - use std::io::net::ip::{SocketAddr, Ipv4Addr}; use std::io::Writer; diff --git a/src/examples/server/info/main.rs b/src/examples/server/info/main.rs index 9d8047f..d1b42be 100644 --- a/src/examples/server/info/main.rs +++ b/src/examples/server/info/main.rs @@ -6,8 +6,6 @@ extern crate time; extern crate http; -use std::vec_ng::Vec; - use std::io::net::ip::{SocketAddr, Ipv4Addr}; use std::io::Writer; diff --git a/src/examples/server/request_uri/main.rs b/src/examples/server/request_uri/main.rs index 1ffd776..4963a47 100644 --- a/src/examples/server/request_uri/main.rs +++ b/src/examples/server/request_uri/main.rs @@ -9,7 +9,7 @@ extern crate time; extern crate http; -use std::vec_ng::Vec; +use std::vec::Vec; use std::io::net::ip::{SocketAddr, Ipv4Addr}; use std::io::Writer; diff --git a/src/http/buffer.rs b/src/http/buffer.rs index 200b89b..039b19b 100644 --- a/src/http/buffer.rs +++ b/src/http/buffer.rs @@ -2,8 +2,8 @@ use std::io::{IoResult, Stream}; use std::cmp::min; -use std::vec_ng::Vec; -use std::vec; +use std::vec::Vec; +use std::slice; use std::num::ToStrRadix; // 64KB chunks (moderately arbitrary) @@ -111,7 +111,7 @@ impl Reader for BufferedStream { try!(self.fill_buffer()); } let size = min(self.read_max - self.read_pos, buf.len()); - vec::bytes::copy_memory(buf, self.read_buffer.slice_from(self.read_pos).slice_to(size)); + slice::bytes::copy_memory(buf, self.read_buffer.slice_from(self.read_pos).slice_to(size)); self.read_pos += size; Ok(size) } diff --git a/src/http/headers/accept_ranges.rs b/src/http/headers/accept_ranges.rs index 44b36b9..a784e65 100644 --- a/src/http/headers/accept_ranges.rs +++ b/src/http/headers/accept_ranges.rs @@ -1,6 +1,6 @@ //! The Accept-Ranges request header, defined in RFC 2616, Section 14.5. -use std::vec_ng::Vec; +use std::vec::Vec; use std::io::IoResult; use std::ascii::StrAsciiExt; diff --git a/src/http/headers/connection.rs b/src/http/headers/connection.rs index bc892f9..1d775ea 100644 --- a/src/http/headers/connection.rs +++ b/src/http/headers/connection.rs @@ -58,7 +58,7 @@ impl super::HeaderConvertible for Connection { #[test] fn test_connection() { - use std::vec_ng::Vec; + use std::vec::Vec; use headers::test_utils::{assert_conversion_correct, assert_interpretation_correct, assert_invalid}; diff --git a/src/http/headers/content_type.rs b/src/http/headers/content_type.rs index 55af084..6dbdf7b 100644 --- a/src/http/headers/content_type.rs +++ b/src/http/headers/content_type.rs @@ -1,6 +1,6 @@ //! The Content-Type entity header, defined in RFC 2616, Section 14.17. use headers::serialization_utils::{push_parameters, WriterUtil}; -use std::vec_ng::Vec; +use std::vec::Vec; use std::io::IoResult; use std::fmt; diff --git a/src/http/headers/mod.rs b/src/http/headers/mod.rs index 4838129..e0160a0 100644 --- a/src/http/headers/mod.rs +++ b/src/http/headers/mod.rs @@ -5,7 +5,7 @@ //! unknown headers are stored in a map in the traditional way. use url::Url; -use std::vec_ng::Vec; +use std::vec::Vec; use std::io::IoResult; use time::{Tm, strptime}; use rfc2616::{is_token_item, is_separator, CR, LF, SP, HT, COLON}; @@ -872,7 +872,7 @@ macro_rules! headers_mod { $attr; #[allow(unused_imports)]; - use std::vec_ng::Vec; + use std::vec::Vec; use std::io::IoResult; use time; use collections::treemap::{TreeMap, Entries}; diff --git a/src/http/headers/serialization_utils.rs b/src/http/headers/serialization_utils.rs index c3ac7fd..7c37181 100644 --- a/src/http/headers/serialization_utils.rs +++ b/src/http/headers/serialization_utils.rs @@ -1,7 +1,7 @@ //! Utility functions for assisting with conversion of headers from and to the HTTP text form. -use std::vec_ng::Vec; -use std::vec; +use std::vec::Vec; +use std::slice; use std::ascii::Ascii; use std::io::IoResult; use rfc2616::is_token; @@ -23,7 +23,7 @@ use rfc2616::is_token; /// assert_eq!(normalise_header_name("FOO-BAR"), "Foo-Bar"); /// ~~~ pub fn normalise_header_name(name: &str) -> ~str { - let mut result: ~[Ascii] = vec::with_capacity(name.len()); + let mut result: ~[Ascii] = slice::with_capacity(name.len()); let mut capitalise = true; for c in name.chars() { let c = match capitalise { @@ -217,7 +217,6 @@ pub fn push_parameters(mut s: ~str, parameters: &[(K, V)]) -> ~s #[cfg(test)] mod test { - use std::vec_ng::Vec; use super::{normalise_header_name, comma_split, comma_split_iter, comma_join, push_quality, push_parameter, push_parameters, push_maybe_quoted_string, push_quoted_string, maybe_quoted_string, quoted_string, diff --git a/src/http/headers/transfer_encoding.rs b/src/http/headers/transfer_encoding.rs index c92dbd3..7bb3668 100644 --- a/src/http/headers/transfer_encoding.rs +++ b/src/http/headers/transfer_encoding.rs @@ -2,7 +2,7 @@ //! //! Transfer-Encoding = "Transfer-Encoding" ":" 1#transfer-coding -use std::vec_ng::Vec; +use std::vec::Vec; use std::ascii::StrAsciiExt; use std::io::IoResult; use headers::serialization_utils::{WriterUtil, push_parameters}; diff --git a/src/http/server/response.rs b/src/http/server/response.rs index 16a23f5..4ca9ee7 100644 --- a/src/http/server/response.rs +++ b/src/http/server/response.rs @@ -1,4 +1,3 @@ -use std::vec_ng::Vec; use std::io::IoResult; use std::io::net::tcp::TcpStream; From 83cd488b164074ed5dc09be8c5989d5a04a6d8ed Mon Sep 17 00:00:00 2001 From: Erik Hedvall Date: Sun, 30 Mar 2014 13:20:57 +0200 Subject: [PATCH 13/20] Rust update: `TcpStream::read_bytes` -> `TcpStream::read_exact` --- src/http/server/request.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/http/server/request.rs b/src/http/server/request.rs index 336a914..8f14b22 100644 --- a/src/http/server/request.rs +++ b/src/http/server/request.rs @@ -372,7 +372,7 @@ impl Request { // Read body if its length is specified match request.headers.content_length { Some(length) => { - match buffer.read_bytes(length) { + match buffer.read_exact(length) { Ok(body) => match str::from_utf8(body) { Some(body_str) => request.body = body_str.to_owned(), None => return (request, Err(status::BadRequest)) From 0c2e1d82a12c4cbffca744732587550a346f29c1 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Tue, 3 Sep 2013 15:39:17 -0700 Subject: [PATCH 14/20] Add servo build support --- Makefile.in | 44 ++++++++++++++++++++++++++++++++++++++++++++ configure | 4 ++++ 2 files changed, 48 insertions(+) create mode 100644 Makefile.in create mode 100644 configure diff --git a/Makefile.in b/Makefile.in new file mode 100644 index 0000000..ef1f3b9 --- /dev/null +++ b/Makefile.in @@ -0,0 +1,44 @@ +VPATH=%VPATH% + +RUST ?= rust +RUSTC ?= rustc +RUSTFLAGS ?= -O +VERSION=0.1-pre + +libhttp_files=$(shell find $(VPATH)/src/libhttp/ -type f -name '*.rs') \ + $(VPATH)/src/libhttp/generated/read_method.rs \ + $(VPATH)/src/libhttp/generated/status.rs + +all: libhttp.dummy + +codegen: $(wildcard $(VPATH)/src/libhttp/codegen/*.rs) + $(RUSTC) $(RUSTFLAGS) $(VPATH)/src/libhttp/codegen/codegen.rs -o codegen + +$(VPATH)/src/libhttp/generated/%.rs: codegen + ./codegen $(patsubst $(VPATH)/src/libhttp/generated/%,%,$@) $(VPATH)/src/libhttp/generated/ + +libhttp.dummy: $(libhttp_files) + $(RUSTC) $(RUSTFLAGS) $(VPATH)/src/libhttp/lib.rs --out-dir . + touch $@ + +build/%:: src/%.rs libhttp.dummy + mkdir -p '$(dir $@)' + $(RUSTC) $(RUSTFLAGS) $< -o $@ -L build/ + +examples: build/examples/apache_fake build/examples/hello_world build/examples/info build/examples/client/client + +.PHONY: check +check: tests + +tests: $(libhttp_files) + $(RUSTC) $(RUSTFLAGS) --test -o tests $(VPATH)/src/libhttp/lib.rs + tests --test + +clean-tests: + rm -f tests + +clean: clean-tests + rm -rf $(VPATH)src/libhttp/generated/ codegen + rm -rf libhttp.dummy + +.PHONY: all examples clean tests clean-tests diff --git a/configure b/configure new file mode 100644 index 0000000..62a0f4c --- /dev/null +++ b/configure @@ -0,0 +1,4 @@ +#!/bin/bash + +SRCDIR="$(cd $(dirname $0) && pwd)" +sed "s#%VPATH%#${SRCDIR}#" ${SRCDIR}/Makefile.in > Makefile From 33e5c3740ad0bd42c72a7b0007283343eb4c1fc8 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Tue, 3 Sep 2013 21:50:23 -0700 Subject: [PATCH 15/20] Fix check target --- Makefile.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile.in b/Makefile.in index ef1f3b9..d8cb587 100644 --- a/Makefile.in +++ b/Makefile.in @@ -32,7 +32,7 @@ check: tests tests: $(libhttp_files) $(RUSTC) $(RUSTFLAGS) --test -o tests $(VPATH)/src/libhttp/lib.rs - tests --test + ./tests --test clean-tests: rm -f tests From 8943cef6a7ffdbebf8188bbb3a5afed599be56a0 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Fri, 6 Sep 2013 16:14:25 -0700 Subject: [PATCH 16/20] Fix clean target --- Makefile.in | 1 + 1 file changed, 1 insertion(+) diff --git a/Makefile.in b/Makefile.in index d8cb587..b5ad236 100644 --- a/Makefile.in +++ b/Makefile.in @@ -40,5 +40,6 @@ clean-tests: clean: clean-tests rm -rf $(VPATH)src/libhttp/generated/ codegen rm -rf libhttp.dummy + rm -f *.so *.dylib *.dll .PHONY: all examples clean tests clean-tests From 874f748cc179ebcfba879913f869061e40a3b44e Mon Sep 17 00:00:00 2001 From: "aydin.kim" Date: Tue, 10 Sep 2013 10:29:43 +0900 Subject: [PATCH 17/20] support android cross build --- Makefile.in | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Makefile.in b/Makefile.in index b5ad236..b5b1bbb 100644 --- a/Makefile.in +++ b/Makefile.in @@ -3,6 +3,7 @@ VPATH=%VPATH% RUST ?= rust RUSTC ?= rustc RUSTFLAGS ?= -O +HOST_RUSTFLAGS ?= -O VERSION=0.1-pre libhttp_files=$(shell find $(VPATH)/src/libhttp/ -type f -name '*.rs') \ @@ -12,7 +13,7 @@ libhttp_files=$(shell find $(VPATH)/src/libhttp/ -type f -name '*.rs') \ all: libhttp.dummy codegen: $(wildcard $(VPATH)/src/libhttp/codegen/*.rs) - $(RUSTC) $(RUSTFLAGS) $(VPATH)/src/libhttp/codegen/codegen.rs -o codegen + $(RUSTC) $(HOST_RUSTFLAGS) $(VPATH)/src/libhttp/codegen/codegen.rs -o codegen $(VPATH)/src/libhttp/generated/%.rs: codegen ./codegen $(patsubst $(VPATH)/src/libhttp/generated/%,%,$@) $(VPATH)/src/libhttp/generated/ From aff6660ada726f577c0b52688763c265420ce7e5 Mon Sep 17 00:00:00 2001 From: Jack Moffitt Date: Thu, 9 Jan 2014 09:41:29 -0700 Subject: [PATCH 18/20] Build changes for latest rust-http. --- Makefile.in | 31 ++++++++++++------------------- 1 file changed, 12 insertions(+), 19 deletions(-) diff --git a/Makefile.in b/Makefile.in index b5b1bbb..292c90a 100644 --- a/Makefile.in +++ b/Makefile.in @@ -6,41 +6,34 @@ RUSTFLAGS ?= -O HOST_RUSTFLAGS ?= -O VERSION=0.1-pre -libhttp_files=$(shell find $(VPATH)/src/libhttp/ -type f -name '*.rs') \ - $(VPATH)/src/libhttp/generated/read_method.rs \ - $(VPATH)/src/libhttp/generated/status.rs +libhttp_files=$(shell find $(VPATH)/src/http/ -type f -name '*.rs') \ + $(VPATH)/src/http/generated/read_method.rs \ + $(VPATH)/src/http/generated/status.rs all: libhttp.dummy -codegen: $(wildcard $(VPATH)/src/libhttp/codegen/*.rs) - $(RUSTC) $(HOST_RUSTFLAGS) $(VPATH)/src/libhttp/codegen/codegen.rs -o codegen +codegen: $(wildcard $(VPATH)/src/codegen/*.rs) + $(RUSTC) $(HOST_RUSTFLAGS) $(VPATH)/src/codegen/main.rs -o codegen -$(VPATH)/src/libhttp/generated/%.rs: codegen - ./codegen $(patsubst $(VPATH)/src/libhttp/generated/%,%,$@) $(VPATH)/src/libhttp/generated/ +$(VPATH)/src/http/generated/%.rs: codegen + ./codegen $(patsubst $(VPATH)/src/http/generated/%,%,$@) $(VPATH)/src/http/generated/ libhttp.dummy: $(libhttp_files) - $(RUSTC) $(RUSTFLAGS) $(VPATH)/src/libhttp/lib.rs --out-dir . + $(RUSTC) $(RUSTFLAGS) $(VPATH)/src/http/lib.rs --out-dir . --lib touch $@ -build/%:: src/%.rs libhttp.dummy - mkdir -p '$(dir $@)' - $(RUSTC) $(RUSTFLAGS) $< -o $@ -L build/ - -examples: build/examples/apache_fake build/examples/hello_world build/examples/info build/examples/client/client - -.PHONY: check check: tests + ./tests --test tests: $(libhttp_files) - $(RUSTC) $(RUSTFLAGS) --test -o tests $(VPATH)/src/libhttp/lib.rs - ./tests --test + $(RUSTC) $(RUSTFLAGS) --test -o tests $(VPATH)/src/http/lib.rs clean-tests: rm -f tests clean: clean-tests - rm -rf $(VPATH)src/libhttp/generated/ codegen + rm -rf $(VPATH)src/http/generated/ codegen rm -rf libhttp.dummy rm -f *.so *.dylib *.dll -.PHONY: all examples clean tests clean-tests +.PHONY: all examples clean clean-tests From 471d29c4bf8a69c0fdd05f2b544c1f42495fbcda Mon Sep 17 00:00:00 2001 From: Lars Bergstrom Date: Tue, 4 Mar 2014 09:00:12 -0800 Subject: [PATCH 19/20] Rust upgrade --- Makefile.in | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Makefile.in b/Makefile.in index 292c90a..7bea9ef 100644 --- a/Makefile.in +++ b/Makefile.in @@ -15,11 +15,14 @@ all: libhttp.dummy codegen: $(wildcard $(VPATH)/src/codegen/*.rs) $(RUSTC) $(HOST_RUSTFLAGS) $(VPATH)/src/codegen/main.rs -o codegen -$(VPATH)/src/http/generated/%.rs: codegen +$(VPATH)/src/http/generated: + mkdir -p $(VPATH)/src/http/generated + +$(VPATH)/src/http/generated/%.rs: codegen $(VPATH)/src/http/generated ./codegen $(patsubst $(VPATH)/src/http/generated/%,%,$@) $(VPATH)/src/http/generated/ libhttp.dummy: $(libhttp_files) - $(RUSTC) $(RUSTFLAGS) $(VPATH)/src/http/lib.rs --out-dir . --lib + $(RUSTC) $(RUSTFLAGS) $(VPATH)/src/http/lib.rs --out-dir . touch $@ check: tests From 163c7067e7f4874ddc9ebadc5c90a87537c15bee Mon Sep 17 00:00:00 2001 From: Lars Bergstrom Date: Wed, 19 Mar 2014 13:59:52 -0500 Subject: [PATCH 20/20] Clean rlib files --- Makefile.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile.in b/Makefile.in index 7bea9ef..37ac375 100644 --- a/Makefile.in +++ b/Makefile.in @@ -37,6 +37,6 @@ clean-tests: clean: clean-tests rm -rf $(VPATH)src/http/generated/ codegen rm -rf libhttp.dummy - rm -f *.so *.dylib *.dll + rm -f *.so *.dylib *.rlib *.dll .PHONY: all examples clean clean-tests