Skip to content

A declarative, zero-copy, proc-macro based header parsing library

License

Notifications You must be signed in to change notification settings

JosephMoniz/noggin

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
Oct 4, 2023
Oct 4, 2023
Oct 4, 2023
Oct 4, 2023
Oct 4, 2023
Oct 4, 2023
Oct 4, 2023
Oct 4, 2023
Oct 4, 2023
Oct 4, 2023
Oct 4, 2023
Oct 4, 2023

Repository files navigation

Noggin

crates.io docs.rs

A declarative, zero-copy, proc-macro based header parser for Rust.

Table of Contents

Features

  • Declarative: Define your HTTP headers using Rust structs with strongly typed header values.
  • Zero-copy capture: Opt-in zero-copy header value parsing.
  • Extensible: Easily add new strongly typed header values.

Examples

Define your HTTP header structure and derive the parsing logic using noggin::Noggin:

use noggin::{Noggin, HeadParser};

#[derive(Noggin)]
pub struct TestHeaders<'a> {
    pub content_type: &'a str,
    pub content_length: u32,
    pub accept: Vec<&'a str>,
    pub connection: Option<&'a str>,
    pub pragma: Option<Vec<&'a str>>,
}

let raw_headers = b"content-type: text/html\r\n\
content-length: 12\r\n\
accept: text/html, text/plain\r\n\
pragma: no-cache, public\r\n\
accept: application/json\r\n\r\n\
hello world!";

let (parsed_headers, body) = TestHeaders::parse_headers(raw_headers).unwrap();
assert_eq!(parsed_headers.content_type, "text/html");
assert_eq!(parsed_headers.content_length, 12);
assert_eq!(parsed_headers.accept, vec!["text/html", "text/plain", "application/json"]);
assert_eq!(parsed_headers.pragma.unwrap(), vec!["no-cache", "public"]);
assert_eq!(body, b"hello world!");

Testing

Tests should run fine with the standard cargo test.

However, for consistency, we recommend using the dockerized test environment. To use the dockerized test environment the only requirements are make and docker (you don't even need rust installed locally). Simply run the following command.

make test

About

A declarative, zero-copy, proc-macro based header parsing library

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Rust 93.7%
  • Makefile 4.2%
  • Shell 2.1%