6个版本 (3个稳定版本)

1.2.0 2020年5月13日
1.1.0 2019年12月4日
1.0.0 2019年11月15日
0.2.0 2019年11月8日
0.1.1 2019年11月7日

#23 in #head

MIT许可证

22KB
488 代码行

Elaine

ci.img docs.img crates.img

此crate提供了一个轻量级且可能不完整的http头部解析器实现,用于async-std读取器。

目标与内容

此crate旨在为async readers提供一个专注于简单性和安全性的HTTP头部解析器;虽然性能也很重要,但安全性和简单性更为重要。

关于安全性

此crate提供的API将永远不会直接包含unsafe代码,包括可能会提高库性能的代码。此外,主要导出项- recognize - 提供了保证,它将永远不会从读取器中读取过多的字节,这可能会损失性能。

关于简单性

此crate在其依赖项中不包括http crate;尽管它维护良好且非常有用,但它引入了一个超集的功能,这些功能对于此实现不是必需的。这一决定绝不是要阻止其他开发者使用该库。

示例

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

依赖项

~4–14MB
~169K SLoC