Skip to content
This repository has been archived by the owner on Mar 14, 2023. It is now read-only.

AOSC-Archive/8dparser

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

33 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

8dparser

Dpkg info parser

Usage

Add line to dependencies in cargo.toml:

eight-deep-parser = "0.1"

And try to parse one package:

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())
    );
}

And try to parse multi package:

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())
    }
}