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)
15KB
218 行
字符串读取器
零分配字符串读取器。字符串读取器可以用于从字符串中解析所有类型的值。它可以用于构建传统的词法分析器等。当您需要解析简单的格式化字符串但正则表达式太重时非常有用。
示例
解析 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");