#reader #parser #byte #light-weight #text-parser #parse-input #minimal

无 std byte_reader

一个最小化的逐字节读取器,用于解析输入

27 个版本 (12 个稳定版本)

3.1.1 2024年7月8日
3.0.0 2024年3月25日
2.1.0 2024年3月24日
1.2.2 2023年12月14日
0.5.2 2023年9月25日

#664解析器实现

Download history 80/week @ 2024-04-22 127/week @ 2024-04-29 9/week @ 2024-05-06 45/week @ 2024-05-13 9/week @ 2024-05-20 9/week @ 2024-05-27 21/week @ 2024-06-03 70/week @ 2024-06-10 51/week @ 2024-06-17 68/week @ 2024-06-24 200/week @ 2024-07-01 215/week @ 2024-07-08 50/week @ 2024-07-15 14/week @ 2024-07-22 101/week @ 2024-07-29 22/week @ 2024-08-05

每月196次 下载
用于 2 crates

MIT 许可证

14KB
172

byte_reader

一个 最小化 的逐字节读取器,用于解析输入。

test status of byte_reader crates.io

用例

以下情况

我想读取和解析一些输入,但这不是一个如此大规模的解析任务,所以我希望避免将像 nomnom8 这样的 重量级 crate 添加到我的 dependencies ...

当然,byte_reader 支持 无 std 环境。


用法

use byte_reader::Reader;

fn main() {
    // Get an input `&[u8]` from a File, standard input, or others
    let sample_input = "Hello,    byte_reader!".as_bytes();

    // Create mutable `r` for the input
    let mut r = Reader::new(sample_input);

    // Use some simple operations
    // to parse the input
    r.consume("Hello").unwrap();
    r.consume(",").unwrap();
    r.skip_whitespace();
    let name = r.read_while(|b| b != &b'!'); // b"byte_reader"
    let name = String::from_utf8_lossy(name).to_string();
    r.consume("!").unwrap();

    println!("Greeted to `{name}`.");
}

操作

  • 剩余
  • read_while, read_until
  • next, next_if
  • peek, peek2, peek3
  • advance_by, unwind_by
  • consume, consume_oneof
  • skip_while, skip_whitespace

特性

"位置"

启用跟踪读取器在输入字节中的位置,包括 (1为起始点)。

"文本"

一些用于文本解析的实用方法:

  • read_quoted_by
  • read_uint, read_int
  • read_camel, read_snake, read_kebab

许可证

byte_reader 使用 MIT 许可证 (LICENSEhttps://opensource.org/licenses/MIT)。

无运行时依赖

特性