pacman-log 0.2.1

A Rust library for parsing and querying pacman logs
Documentation
use pacman_log::{Action, LogReader};

fn main() {
    println!("=== Last 5 upgrades ===");
    let entries: Vec<_> = LogReader::system()
        .reverse()
        .filter_action(Action::Upgraded)
        .into_iter()
        .take(5)
        .filter_map(|e| e.ok())
        .collect();

    for e in &entries {
        println!(
            "{} {} ({} -> {})",
            e.timestamp.format("%Y-%m-%d"),
            e.package,
            e.old_version.as_deref().unwrap_or("?"),
            e.new_version.as_deref().unwrap_or("?")
        );
    }

    println!("\n=== Last 3 installs ===");
    let installs: Vec<_> = LogReader::system()
        .reverse()
        .filter_action(Action::Installed)
        .into_iter()
        .take(3)
        .filter_map(|e| e.ok())
        .collect();

    for e in &installs {
        println!(
            "{} {} ({})",
            e.timestamp.format("%Y-%m-%d"),
            e.package,
            e.new_version.as_deref().unwrap_or("?")
        );
    }

    println!("\n=== Total entry count ===");
    let total = LogReader::system()
        .into_iter()
        .filter_map(|e| e.ok())
        .count();
    println!("{} entries", total);

    println!("\n=== Last 3 transactions ===");
    let txns: Vec<_> = LogReader::system()
        .transactions()
        .filter_map(|t| t.ok())
        .collect();
    for txn in txns.iter().rev().take(3) {
        println!(
            "{} {} ({} ops)",
            txn.started.format("%Y-%m-%d %H:%M"),
            txn.command.as_deref().unwrap_or("(direct)"),
            txn.operations.len()
        );
    }
}