diff --git a/Cargo.toml b/Cargo.toml index da8c2d5..547a93b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,6 +3,7 @@ name = "micro_http" version = "0.1.0" license = "Apache-2.0" authors = ["Amazon Firecracker team "] +edition = "2018" [dependencies] epoll = ">=4.0.1" diff --git a/src/common/headers.rs b/src/common/headers.rs index 8e99bd5..03e1773 100644 --- a/src/common/headers.rs +++ b/src/common/headers.rs @@ -3,7 +3,7 @@ use std::result::Result; -use RequestError; +use super::RequestError; /// Wrapper over an HTTP Header type. #[derive(Debug, Eq, Hash, PartialEq)] @@ -58,7 +58,7 @@ impl Header { /// invalidate our request as we don't support the full set of HTTP/1.1 specification. /// Such header entries are "Transfer-Encoding: identity; q=0", which means a compression /// algorithm is applied to the body of the request, or "Expect: 103-checkpoint". -#[derive(Debug)] +#[derive(Debug, PartialEq)] pub struct Headers { /// The `Content-Length` header field tells us how many bytes we need to receive /// from the source after the headers. diff --git a/src/connection.rs b/src/connection.rs index 7e10a3e..1b98a9c 100644 --- a/src/connection.rs +++ b/src/connection.rs @@ -4,17 +4,18 @@ use std::collections::VecDeque; use std::io::{Read, Write}; -use common::ascii::{CR, CRLF_LEN, LF}; -use common::Body; -pub use common::{ConnectionError, RequestError}; -use headers::Headers; -use request::{find, Request, RequestLine}; -use response::{Response, StatusCode}; +use crate::common::ascii::{CR, CRLF_LEN, LF}; +use crate::common::headers::Headers; +use crate::common::{Body, RequestError}; +use crate::request::{find, Request, RequestLine}; +use crate::response::{Response, StatusCode}; + +pub use crate::common::ConnectionError; const BUFFER_SIZE: usize = 1024; /// Describes the state machine of an HTTP connection. -pub enum ConnectionState { +pub(crate) enum ConnectionState { WaitingForRequestLine, WaitingForHeaders, WaitingForBody, @@ -389,7 +390,7 @@ impl HttpConnection { #[cfg(test)] mod tests { use super::*; - use common::{Method, Version}; + use crate::common::{Method, Version}; use std::os::unix::net::UnixStream; #[test] diff --git a/src/lib.rs b/src/lib.rs index 7eab6f9..16b7a4b 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -114,13 +114,10 @@ mod connection; mod request; mod response; mod server; -use common::ascii; -use common::headers; -pub use connection::{ConnectionError, HttpConnection}; -pub use request::{Request, RequestError}; -pub use response::{Response, StatusCode}; -pub use server::{HttpServer, ServerError, ServerRequest, ServerResponse}; - -pub use common::headers::{Headers, MediaType}; -pub use common::{Body, Method, Version}; +pub use self::common::headers::{Headers, MediaType}; +pub use self::common::{Body, Method, Version}; +pub use self::connection::{ConnectionError, HttpConnection}; +pub use self::request::{Request, RequestError}; +pub use self::response::{Response, StatusCode}; +pub use self::server::{HttpServer, ServerError, ServerRequest, ServerResponse}; diff --git a/src/request.rs b/src/request.rs index e8c5e78..2f59e1c 100644 --- a/src/request.rs +++ b/src/request.rs @@ -3,16 +3,17 @@ use std::str::from_utf8; -use common::ascii::{CR, CRLF_LEN, LF, SP}; -pub use common::RequestError; -use common::{Body, Method, Version}; -use headers::Headers; +use crate::common::ascii::{CR, CRLF_LEN, LF, SP}; +use crate::common::headers::Headers; +use crate::common::{Body, Method, Version}; + +pub use crate::common::RequestError; /// Finds the first occurence of `sequence` in the `bytes` slice. /// /// Returns the starting position of the `sequence` in `bytes` or `None` if the /// `sequence` is not found. -pub fn find(bytes: &[u8], sequence: &[u8]) -> Option { +pub(crate) fn find(bytes: &[u8], sequence: &[u8]) -> Option { bytes .windows(sequence.len()) .position(|window| window == sequence) @@ -135,7 +136,6 @@ impl RequestLine { } /// Wrapper over an HTTP Request. -#[allow(unused)] #[derive(Debug)] pub struct Request { /// The request line of the request. diff --git a/src/response.rs b/src/response.rs index bd9ac37..e113bf0 100644 --- a/src/response.rs +++ b/src/response.rs @@ -3,15 +3,14 @@ use std::io::{Error as WriteError, Write}; -use ascii::{COLON, CR, LF, SP}; -use common::{Body, Version}; -use headers::{Header, MediaType}; +use crate::common::ascii::{COLON, CR, LF, SP}; +use crate::common::headers::{Header, MediaType}; +use crate::common::{Body, Version}; /// Wrapper over a response status code. /// /// The status code is defined as specified in the /// [RFC](https://tools.ietf.org/html/rfc7231#section-6). -#[allow(dead_code)] #[derive(Clone, Copy, Debug, PartialEq)] pub enum StatusCode { /// 100, Continue @@ -124,7 +123,6 @@ impl ResponseHeaders { } /// Sets the content type to be written in the HTTP response. - #[allow(unused)] pub fn set_content_type(&mut self, content_type: MediaType) { self.content_type = content_type; } diff --git a/src/server.rs b/src/server.rs index 12a99ec..657371a 100644 --- a/src/server.rs +++ b/src/server.rs @@ -2,18 +2,20 @@ // SPDX-License-Identifier: Apache-2.0 extern crate epoll; +use std::collections::HashMap; use std::io::{Read, Write}; use std::os::unix::io::AsRawFd; use std::os::unix::io::RawFd; use std::os::unix::net::{UnixListener, UnixStream}; use std::path::Path; -use common::{Body, Version}; -pub use common::{ConnectionError, RequestError, ServerError}; -use connection::HttpConnection; -use request::Request; -use response::{Response, StatusCode}; -use std::collections::HashMap; +use crate::common::ConnectionError; +use crate::common::{Body, Version}; +use crate::connection::HttpConnection; +use crate::request::Request; +use crate::response::{Response, StatusCode}; + +pub use crate::common::ServerError; static SERVER_FULL_ERROR_MESSAGE: &[u8] = b"HTTP/1.1 503\r\n\ Server: Firecracker API\r\n\ @@ -522,11 +524,10 @@ impl HttpServer { mod tests { use super::*; use std::fs; + use std::io::{Read, Write}; use std::os::unix::net::UnixStream; - use common::Body; - use std::io::Read; - use std::io::Write; + use crate::common::Body; #[test] fn test_wait_one_connection() {