str-reader

Crates.iostr-reader
lib.rsstr-reader
version0.1.2
sourcesrc
created_at2020-10-29 16:09:03.14346
updated_at2022-01-19 09:27:41.502951
descriptionSimple reader/parser for formatted strings.
homepage
repositoryhttps://github.com/operutka/str-reader
max_upload_size
id306690
size15,959
Ondřej Perutka (operutka)

documentation

https://docs.rs/str-reader/

README

String reader

Crates.io MIT licensed Build Status

Zero-allocation string reader. The string reader can be used to parse all kinds of values from strings. It can be used for construction of traditional lexical analyzers for example. It is useful in situation when you need to parse simple formatted strings but regular expressions are too heavy-weight.

Example

Parsing HTTP response header:

use std::num::ParseIntError;

use str_reader::{ParseError, StringReader};

/// Parse the first line of an HTTP response header.
fn parse_http_response_line(line: &str) -> Result<(u16, &str), HttpParseError> {
    let mut reader = StringReader::new(line);

    reader.match_str("HTTP/")?;

    match reader.read_word() {
        "1.0" => (),
        "1.1" => (),
        _ => return Err(HttpParseError),
    }

    let status_code = reader.read_u16()?;

    Ok((status_code, reader.as_str().trim()))
}

#[derive(Debug)]
struct HttpParseError;

impl From<ParseError> for HttpParseError {
    fn from(_: ParseError) -> Self {
        Self
    }
}

impl From<ParseIntError> for HttpParseError {
    fn from(_: ParseIntError) -> Self {
        Self
    }
}

let (status_code, status_msg) = parse_http_response_line("HTTP/1.1 404 Not Found").unwrap();

assert_eq!(status_code, 404);
assert_eq!(status_msg, "Not Found");
Commit count: 6

cargo fmt