hefty

Crates.iohefty
lib.rshefty
version0.3.1
sourcesrc
created_at2023-11-19 22:46:51.983725
updated_at2024-05-19 21:25:41.980578
descriptionParser for streaming data
homepage
repositoryhttps://github.com/jongiddy/hefty
max_upload_size
id1041559
size79,948
(jongiddy)

documentation

README

hefty

Parser for streaming data.

// Build parsers for a URI hostname (https://www.rfc-editor.org/rfc/rfc3986.html#appendix-A)
let unreserved = char::when(|c| c.is_ascii_alphanumeric() || "-._~".contains(c));
let pct_encoded = (
    '%',
    char::when(|c| c.is_ascii_hexdigit()).times(2).collect(),
)
    .seq()
    .collect();
let sub_delims = ('!', '$', '&', '\'', '(', ')', '*', '+', ',', ';', '=').any();

let reg_name = (&unreserved, &pct_encoded, &sub_delims)
    .any()
    .repeated(1..255)
    .collect();

// Parse a hostname arriving as a stream of data.
let ParseResult::Partial(state) = reg_name.extract(ByteStream::from("www.exa"), None, false)
else {
    panic!();
};
let ParseResult::Partial(state) =
    reg_name.extract(ByteStream::from("mple.co"), Some(state), false)
else {
    panic!();
};
let ParseResult::Match(output, input) =
    reg_name.extract(ByteStream::from("m/path"), Some(state), true)
else {
    panic!();
};
assert_eq!(output.to_string(), "www.example.com");
assert_eq!(input.to_string(), "/path");
Commit count: 50

cargo fmt