#dpkg #info #parser #deep #eight #line #process

eight-deep-parser

Dpkg 信息解析器

8 个版本

0.3.2 2023年1月31日
0.3.1 2023年1月31日
0.2.2 2023年1月30日
0.1.1 2022年12月12日

#1 in #eight

每月下载 28

MIT 许可证

16KB
340

8dparser

Dpkg 信息解析器

使用方法

dependencies 中添加行到 cargo.toml

eight-deep-parser = "0.1"

尝试解析一个软件包

use std::process::Command;
use eight_deep_parser::{parse_multi, parse_one, Item};

fn main() {
    let command = Command::new("dpkg")
        .arg("-s")
        .arg("plasma-workspace")
        .output()
        .unwrap();

    let stdout = command.stdout;
    let r = parse_one(std::str::from_utf8(&stdout).unwrap()).unwrap();

    assert_eq!(
        r.get("Package").unwrap(),
        &Item::OneLine("plasma-workspace".to_string())
    );
}

尝试解析多个软件包

use std::{fs, io::Read, process::Command};
use eight_deep_parser::{parse_multi, Item};

fn main() {
    let dir = fs::read_dir("/var/lib/apt/lists").unwrap();

    for i in dir.flatten() {
      if !i.file_name().to_str().unwrap().ends_with("_Packages") {
          continue;
      }

      let mut f = std::fs::File::open(i.path()).unwrap();
      let mut buf = Vec::new();
      f.read_to_end(&mut buf).unwrap();

      let r = parse_multi(std::str::from_utf8(&buf).unwrap());

      assert!(r.is_ok())
    }
}

依赖项

~2–2.9MB
~54K SLoC