Commit Graph

119 Commits

Author SHA1 Message Date
Prabhjyot Singh Sodhi
76cbf38423 feat(headers): add PartialEq impl for Headers struct
compare the raw representations of the headers for the lack of a better alternative
helpful when asserting HttpRequest/ HttpResponse in tests elsewhere
2015-09-17 10:40:10 +05:30
Erick Tryzelaar
3a3c8b69a7 refactor(serde): Minor serde micro-optimizations 2015-08-31 21:49:05 -07:00
Patrick Walton
f5f5e1cb2d fix(headers): fix broken deserialization of headers
Sorry about that!
2015-07-23 20:58:35 -07:00
Sean McArthur
da817ba8bf test(header): change test_headers_show to use str.contains 2015-07-23 12:09:55 -07:00
Sean McArthur
a0739e6c96 test(headers): fix test_headers_show() 2015-07-23 11:53:46 -07:00
Sean McArthur
74021a24fe test(headers): remove usage of iter.join() 2015-07-23 11:38:26 -07:00
Sean McArthur
d2e8b5dc3d fix(tests): iter.connect() is now iter.join() 2015-07-22 19:01:33 -07:00
Patrick Walton
87de1b77bc feat(http): add optional serialization of common types via serde
This is behind a Cargo feature to avoid forcing downstream users to
depend on `serde`. It is needed for Servo IPC to work.
2015-07-10 17:45:08 -07:00
Pyfisch
db93ca0697 style(rustfmt): run rustfmt on hyper correct overlong lines 2015-06-29 20:22:22 +02:00
Sean McArthur
306f39c731 chore(logging): add some trace! logging to headers 2015-06-17 11:37:26 -07:00
Ryman
8275f3b9e3 docs(header): fix typos and minor rewording 2015-06-13 16:53:26 +01:00
Sean McArthur
a8e29efdec docs(header): greatly expand on implementing custom headers 2015-06-12 15:20:58 -07:00
Pyfisch
195a89fa91 refactor(headers): errors for parse_header
Header::parse_header() returns now a hyper Result instead of an option
this will enable more precise Error messages in the future, currently
most failures are reported as ::Error::Header.

BREAKING CHANGE: parse_header returns Result instead of Option, related
code did also change
2015-06-10 22:22:56 +02:00
Sean McArthur
7e3858c962 perf(all): replace &str.to_string() with .to_owned() 2015-05-12 23:01:58 -07:00
Sean McArthur
9ba074d150 refactor(error): remove redundant parts of error names
The old names followed the old style of including the module name and
"Error" in each variant. The new style is to refer to an error from its
owning module, and variants are now scoped to their enum, so there's no
need to include the enum name in the variant name.

BREAKING CHANGE: The terms `Http` and `Error` have been removed from the Error
  type and its variants. `HttpError` should now be accessed as `hyper::Error`,
  and variants like `HttpIoError` should be accessed as `Error::Io`.
2015-05-05 11:53:09 -07:00
Pyfisch
db4d89189a style(headers): Break lines with over 100 characters 2015-05-03 15:45:11 +02:00
Pyfisch
66d54d03e7 refactor(headers): Improve docs, fix nits, make formatting faster
src/header/parsing.rs now uses unsafe get_unchecked() again, I don't
know why it was removed.
2015-05-03 13:56:32 +02:00
Pyfisch
6b59bd28b7 refactor(hyper): Fix a few nits 2015-05-01 11:58:15 +02:00
Pyfisch
308880b455 feat(headers): Implement Content-Language header field
Closes #475
2015-04-27 21:50:57 +02:00
Sean McArthur
4f09b002ff feat(log): clean up logging 2015-04-15 21:08:52 -07:00
Sean McArthur
55b37f0148 test(beta): enable testing on beta rustc 2015-04-15 11:59:23 -07:00
Jonathan Reem
8e0655637e fix(headers): Add CowStr as a temporary hack to build on beta.
We can revert this PR when rust-lang/rust#23995 lands, but it won't
land until after beta is cut.
2015-04-02 22:33:55 -07:00
Sean McArthur
5c2de29a81 chore(stability): remove core feature gate 2015-04-02 17:32:04 -07:00
Jonathan Reem
320d10d50d chore(all): Move downcasting to a stable implementation. 2015-04-02 13:30:41 -07:00
Sean McArthur
ccd4814e69 chore(stability): remove into_cow feature gate 2015-04-02 13:01:49 -07:00
Pyfisch
6cf052bf0f refactor(header): Implement HttpDate, a wrapper for dates
Using `time::Tm` directly in HTTP header fields requires special handling to parse and format
the header values., this stops us from using the header macros. By wrapping `time::Time` in a
`HttpDate`, we can use the `FromStr` and `Display` traits of `HttpDate` like for most other values.

BREAKING_CHANGE: All code using one of the `Date`, `Expires`, `If-Modified-Since`,
`If-Unmodified-Since`, `Last-Modified` header fields needs to wrap `time::Tm`
with `HttpDate`. Removed `FromStr` trait of `Date`, `If-Modified-Sice` and `If-Unmodified-Sice`,
implementing the trait here is inconsistent with other headers.
2015-03-31 17:29:31 +02:00
Sean McArthur
a62323cafe refactor(hyper): remove need for collections feature 2015-03-27 11:50:14 -07:00
Florian Hartwig
3e456f00f9 fix(rustup): rustc 1.0.0-nightly (123a754cb 2015-03-24)
* fix `extern crate` declaration for rustc-serialize
* enable `into_cow` feature
* replace as_slice() calls by as_ref and enable `convert` feature
* use `core` feature in doc tests
2015-03-25 20:55:42 +01:00
Sebastian Thiel
8181de253a fix(rustup): rustc 1.0.0-nightly (ea8b82e90)
This commit fixes `cargo build` and `cargo test`.

Method lookup on traits seems to have changed to force
`impl TraitName` expressions to be more specific. That means that
`method` will not be found anymore on an object of type `&Trait+Send`,
unless you provide an `impl Trait+Send`.

Now `NetworkStream` and `HeaderFormat` trait implementations
are done against `* + Send`, which helps the compiler to find the
respective `downcast*` method implementations once again.
2015-03-20 10:28:35 +01:00
Sean McArthur
b87bb20f0c perf(http): changes http parsing to use httparse crate
httparse is a http1 stateless push parser. This not only speeds up
parsing right now with sync io, but will also be useful for when we get
async io, since it's push based instead of pull.

BREAKING CHANGE: Several public functions and types in the `http` module
  have been removed. They have been replaced with 2 methods that handle
  all of the http1 parsing.
2015-03-13 16:56:13 -07:00
Sean McArthur
fdc78f8f89 Merge pull request #358 from hyperium/reparsing
feat(headers): adds re-parsing ability when getting typed headers
2015-03-03 20:47:47 -08:00
Hugo Duncan
180d9a92d9 feat(headers): add enum for Charset
Make Charset more strongly typed.
2015-03-03 20:46:41 -08:00
Sean McArthur
d68773c79f feat(headers): add q function to ease creating Quality values 2015-03-03 19:32:37 -08:00
Sean McArthur
df756871ed feat(headers): adds re-parsing ability when getting typed headers
BREAKING CHANGE: added requirement that all HeaderFormat implementations
  must also be fmt::Debug. This likely as easy as slapping
  #[derive(Debug)] on to any custom headers.
2015-03-03 18:51:29 -08:00
Sean McArthur
0fd6fcd7c7 feat(hyper): switch to std::io, std::net, and std::path.
All instances of `old_io` and `old_path` were switched to use the new
shiny `std::io`, `std::net`, and `std::path` modules. This means that
`Request` and `Response` implement `Read` and `Write` now.

Because of the changes to `TcpListener`, this also takes the opportunity
to correct the method usage of `Server`. As with other
languages/frameworks, the server is first created with a handler, and
then a host/port is passed to a `listen` method. This reverses what
`Server` used to do.

Closes #347

BREAKING CHANGE: Check the docs. Everything was touched.
2015-03-03 14:32:03 -08:00
Pyfisch
8f6ce453de refactor(headers): Use u16 based newtype for quality value
Using floating point numbers is problematic because comparison is inexact.
They also take more space than integral numbers in this case.

Add `FromPrimitve`, `ToPrimitive` and `Default` traits to quality newtype.

Closes: #330

BREAKING_CHANGE: Replace f32 quality values in quality items with a
Quality(u16) newtype. Valid values are from 0 to 1000.
2015-02-28 19:44:34 +01:00
Robin Gloster
1b6e6a040f fix(rustup): str.split and associated type changes 2015-02-27 13:33:21 +01:00
filsmick (Yohaï Berreby)
4f576780c2 feat(headers): add remove_raw method and corresponding test
It was previously impossible to remove a header set by set_raw()

Closes #326
2015-02-22 16:16:39 +01:00
Sean McArthur
4f5b97fefc fix(rustup): Send changes 2015-02-21 15:05:51 -08:00
Renato Zannon
98b8c4b137 fix(rustup): CowString is gone 2015-02-21 15:05:51 -08:00
Renato Zannon
598d8f93e4 fix(rustup): Extend now takes an IntoIterator 2015-02-21 15:05:51 -08:00
Renato Zannon
039e984f68 fix(rustup): Remove uses of the obsolete &a[] syntax 2015-02-21 15:05:50 -08:00
Renato Zannon
234fcdc3a2 fix(rustup): Fix signature of IntoCow 2015-02-21 15:05:50 -08:00
Sean McArthur
6aa6605e55 Merge pull request #296 from hugoduncan/feature/factor-entity-tag
Factor out EntityTag from Etag header
2015-02-06 22:01:27 -08:00
Sean McArthur
d7fe8c307a refactor(headers): switch from MuCell to OptCell
It turns out, we don't need capabilities of MuCell (or even RefCell).
We don't to have sophisticated interior mutability. We don't ever lend
out references that may be mutated later. Instead, if there is no value
to lend, then we generate the value, require interior mutability to save
the value internally, and then we return a reference. We never ever
change a value once it's been generated. It can be changed, but only via
&mut self methods, where we can safely reason about mutability.

This means we don't need keep borrow checking code at runtime, which
helps performance. We also are able to reduce the amount of unsafe
transmutes. The internal API more safely constrains the usage of unsafe,
enforcing our invariants, instead of shotgunning unsafe usage with Refs
and promising we're doing it correctly.

On a machine with lower memory (1GB):

    Before:
    test bench_mock_hyper ... bench:    251772 ns/iter (+/- 128445)

    After:
    test bench_mock_hyper ... bench:    152603 ns/iter (+/- 25928)

On a machine with more memory, weaker CPU:

    Before:
    test bench_mock_hyper ... bench:    129398 ns/iter (+/- 51740)

    After:
    test bench_mock_hyper ... bench:    115935 ns/iter (+/- 28555)

Closes #252
2015-02-06 21:47:29 -08:00
Hugo Duncan
28fd5c81f5 refactor(headers): factor out EntityTag from Etag
Allow use of EntityTag in other headers that use entity tags.

BREAKING CHANGE: for any consumers of the Etag header, since the entity
tag is now in a tuple.
2015-02-06 19:48:29 -05:00
Sean McArthur
22a80a9308 Merge pull request #292 from hyperium/rustup
fix(rustup): update FromStr
2015-02-03 19:01:32 -08:00
Peter Atashian
742081c8cf fix(rustup): update FromStr
Signed-off-by: Peter Atashian <retep998@gmail.com>
2015-02-03 18:57:24 -08:00
Sean McArthur
f18a8fb76f fix(headers): add limit to maximum header size that should be parsed
Closes #256
2015-02-03 11:06:17 -08:00
Sean McArthur
3af8b687d4 fix(rustup): switch to unstable features 2015-01-31 12:15:44 -08:00