diff --git a/.travis.yml b/.travis.yml
index 4642eb065..d12c7be0a 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,14 +1,27 @@
language: rust
-
-rust:
- - 1.20.0
- - stable
- - beta
- - nightly-2018-01-03
-
-sudo: required
+sudo: false
dist: trusty
+cache:
+ cargo: true
+ apt: true
+
+matrix:
+ include:
+ - rust: 1.20.0
+ - rust: stable
+ - rust: beta
+ - rust: nightly
+ allow_failures:
+ - rust: nightly
+ - rust: beta
+
+#rust:
+# - 1.20.0
+# - stable
+# - beta
+# - nightly-2018-01-03
+
env:
global:
- RUSTFLAGS="-C link-dead-code"
@@ -42,13 +55,10 @@ script:
cd examples/multipart && cargo check && cd ../..
cd examples/json && cargo check && cd ../..
cd examples/template_tera && cargo check && cd ../..
- fi
- - |
- if [[ "$TRAVIS_RUST_VERSION" == "beta" ]]; then
- cd examples/diesel && cargo check && cd ../..
- cd examples/tls && cargo check && cd ../..
- cd examples/websocket-chat && cargo check && cd ../..
- cd examples/websocket && cargo check && cd ../..
+ cd examples/diesel && cargo check && cd ../..
+ cd examples/tls && cargo check && cd ../..
+ cd examples/websocket-chat && cargo check && cd ../..
+ cd examples/websocket && cargo check && cd ../..
fi
- |
if [[ "$TRAVIS_RUST_VERSION" == "nightly" && $CLIPPY ]]; then
@@ -58,7 +68,7 @@ script:
# Upload docs
after_success:
- |
- if [[ "$TRAVIS_OS_NAME" == "linux" && "$TRAVIS_PULL_REQUEST" = "false" && "$TRAVIS_BRANCH" == "master" && "$TRAVIS_RUST_VERSION" == "nightly-2018-01-03" ]]; then
+ if [[ "$TRAVIS_OS_NAME" == "linux" && "$TRAVIS_PULL_REQUEST" = "false" && "$TRAVIS_BRANCH" == "master" && "$TRAVIS_RUST_VERSION" == "nightly" ]]; then
cargo doc --features alpn --no-deps &&
echo "" > target/doc/index.html &&
cargo install mdbook &&
diff --git a/src/encoding.rs b/src/encoding.rs
index 7eb5ddfaf..2a054536b 100644
--- a/src/encoding.rs
+++ b/src/encoding.rs
@@ -36,6 +36,7 @@ pub enum ContentEncoding {
impl ContentEncoding {
+ #[inline]
fn is_compression(&self) -> bool {
match *self {
ContentEncoding::Identity | ContentEncoding::Auto => false,
@@ -51,7 +52,7 @@ impl ContentEncoding {
ContentEncoding::Identity | ContentEncoding::Auto => "identity",
}
}
- // default quality
+ /// default quality value
fn quality(&self) -> f64 {
match *self {
ContentEncoding::Br => 1.1,
@@ -62,6 +63,7 @@ impl ContentEncoding {
}
}
+// TODO: remove memory allocation
impl<'a> From<&'a str> for ContentEncoding {
fn from(s: &'a str) -> ContentEncoding {
match s.trim().to_lowercase().as_ref() {
@@ -157,11 +159,7 @@ impl EncodedPayload {
Box::new(GzDecoder::new(BytesMut::with_capacity(8192).writer()))),
_ => Decoder::Identity,
};
- EncodedPayload {
- inner: inner,
- decoder: dec,
- error: false,
- }
+ EncodedPayload{ inner: inner, decoder: dec, error: false }
}
}
@@ -254,6 +252,7 @@ impl PayloadWriter for EncodedPayload {
}
return
}
+ trace!("Error decoding gzip encoding");
}
Decoder::Deflate(ref mut decoder) => {
@@ -417,8 +416,7 @@ impl PayloadEncoder {
ContentEncoding::Br => ContentEncoder::Br(
BrotliEncoder::new(transfer, 5)),
ContentEncoding::Identity => ContentEncoder::Identity(transfer),
- ContentEncoding::Auto =>
- unreachable!()
+ ContentEncoding::Auto => unreachable!()
}
)
}
@@ -643,10 +641,8 @@ impl TransferEncoding {
pub fn is_eof(&self) -> bool {
match self.kind {
TransferEncodingKind::Eof => true,
- TransferEncodingKind::Chunked(ref eof) =>
- *eof,
- TransferEncodingKind::Length(ref remaining) =>
- *remaining == 0,
+ TransferEncodingKind::Chunked(ref eof) => *eof,
+ TransferEncodingKind::Length(ref remaining) => *remaining == 0,
}
}
diff --git a/src/payload.rs b/src/payload.rs
index df2e4f7fb..002034da7 100644
--- a/src/payload.rs
+++ b/src/payload.rs
@@ -70,61 +70,73 @@ impl Payload {
}
/// Indicates EOF of payload
+ #[inline]
pub fn eof(&self) -> bool {
self.inner.borrow().eof()
}
/// Length of the data in this payload
+ #[inline]
pub fn len(&self) -> usize {
self.inner.borrow().len()
}
/// Is payload empty
+ #[inline]
pub fn is_empty(&self) -> bool {
self.inner.borrow().len() == 0
}
/// Get first available chunk of data.
+ #[inline]
pub fn readany(&self) -> ReadAny {
ReadAny(Rc::clone(&self.inner))
}
/// Get exact number of bytes
+ #[inline]
pub fn readexactly(&self, size: usize) -> ReadExactly {
ReadExactly(Rc::clone(&self.inner), size)
}
/// Read until `\n`
+ #[inline]
pub fn readline(&self) -> ReadLine {
ReadLine(Rc::clone(&self.inner))
}
/// Read until match line
+ #[inline]
pub fn readuntil(&self, line: &[u8]) -> ReadUntil {
ReadUntil(Rc::clone(&self.inner), line.to_vec())
}
#[doc(hidden)]
+ #[inline]
pub fn readall(&self) -> Option {
self.inner.borrow_mut().readall()
}
/// Put unused data back to payload
+ #[inline]
pub fn unread_data(&mut self, data: Bytes) {
self.inner.borrow_mut().unread_data(data);
}
/// Get size of payload buffer
+ #[inline]
pub fn buffer_size(&self) -> usize {
self.inner.borrow().buffer_size()
}
/// Set size of payload buffer
+ #[inline]
pub fn set_buffer_size(&self, size: usize) {
self.inner.borrow_mut().set_buffer_size(size)
}
/// Convert payload into compatible `HttpResponse` body stream
+ #[inline]
pub fn stream(self) -> BodyStream {
Box::new(self.map(|i| i.0).map_err(|e| e.into()))
}
@@ -134,6 +146,7 @@ impl Stream for Payload {
type Item = PayloadItem;
type Error = PayloadError;
+ #[inline]
fn poll(&mut self) -> Poll