Skip to content
http head parser for rust
Rust
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.github/workflows 0.1.1 - bugfix (#3) Nov 7, 2019
benches initial implementation (#1) Nov 7, 2019
examples
src save Nov 8, 2019
tests
.gitignore
CONTRIBUTING.md
Cargo.toml
LICENSE
README.md
rustfmt.toml

README.md

Elaine

ci.img docs.img crates.img

This crate provides a lightweight and potentially incomplete http head parser implementation for async-std readers.

Goals & Stuff

This crate is intended to provide an HTTP head parser for async readers with a focus on simplicity and safety; while performance is appreciated, safety and simplicity take priority.

On Safety

The api provided by this crate will never include unsafe code directly, including code that would otherwise improve the performance of the libary. In addition, the main export - recognize - provides the guarantee that it will never over-read bytes from a reader, again at the potential loss of performance.

On Simplictity

This crate does not include the http crate in it's dependencies; though well-maintained and useful as it is, it would introduce a super set of functionality that is not required for this implementation. This decision is not in any way meant to discourage other developers from using that library.

Example

use std::boxed::Box;
use std::error::Error;

use elaine::{recognize, RequestMethod};
use async_std::task::block_on;

fn main() -> Result<(), Box<dyn Error>> {
  block_on(async {
    let mut req: &[u8] = b"GET /elaine HTTP/1.1\r\nContent-Length: 3\r\n\r\nhey";
    let result = recognize(&mut req).await.unwrap();
    assert_eq!(result.method(), Some(RequestMethod::GET));
    assert_eq!(result.len(), Some(3));
    assert_eq!(std::str::from_utf8(req), Ok("hey"));
  });
  Ok(())
}
elaine
elaine

Contributing

See CONTRIBUTING.

You can’t perform that action at this time.