3 个版本

0.1.2 2022年1月19日
0.1.1 2020年11月2日
0.1.0 2020年10月29日

解析器实现 中排名 2447

每月下载 28
3 个 crate 中使用 (通过 msf-sdp)

MIT 许可证

15KB
218

字符串读取器

Crates.io MIT licensed Build Status

零分配字符串读取器。字符串读取器可以用于从字符串中解析所有类型的值。它可以用于构建传统的词法分析器等。当您需要解析简单的格式化字符串但正则表达式太重时非常有用。

示例

解析 HTTP 响应头

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");

无运行时依赖