stuckliste 0.4.0

A library for reading and writing MacOS bill-of-materials (BOM) files.
Documentation
# stuckliste

[![Crates.io Version](https://img.shields.io/crates/v/stuckliste)](https://crates.io/crates/stuckliste)
[![Docs](https://docs.rs/stuckliste/badge.svg)](https://docs.rs/stuckliste)
[![dependency status](https://deps.rs/repo/github/igankevich/stuckliste/status.svg)](https://deps.rs/repo/github/igankevich/stuckliste)

MacOS's bill-of-materials (BOM) files reader/writer library that is
fuzz-tested against the original `mkbom` and `lsbom` utilities.
Includes re-implementation of these utilities as well.


## Introduction

`stuckliste` is a library that offers types and methods for reading/writing MacOS bill-of-materials (BOM) files.
These files are generic storage container for various type of information
with the most common type being _receipts_ —
files that contains a list of all files and directories owned by a package and
that are usually stored under `/Library/Receipts`.
The library is fuzz-tested against MacOS's `mkbom` and `lsbom` utilities ensuring that 
it produces structurely the same output.


## Installation

The easiest way to use `stuckliste` is via command line interface.

```bash
cargo install stuckliste-cli
```


## Usage


### As a command-line application

```bash
mkbom /tmp /tmp/receipt.bom
lsbom /tmp/receipt.bom
```


### As a library

```rust
use std::fs::File;
use std::io::Error;
use stuckliste::receipt::{Receipt, ReceiptBuilder};

fn create_receipt() -> Result<(), Error> {
    let file = File::create("/tmp/receipt.bom")?;
    let receipt = ReceiptBuilder::new().create("/tmp")?;
    receipt.write(file)?;
    Ok(())
}

fn read_receipt() -> Result<(), Error> {
    let file = File::open("/tmp/receipt.bom")?;
    let receipt = Receipt::read(file)?;
    for (path, metadata) in receipt.entries()?.into_iter() {
        println!("{:?}: {:?}", path, metadata);
    }
    Ok(())
}
```

## BOM reference

The BOM file structure is explained in a separate
[document](https://github.com/igankevich/stuckliste/tree/master/docs/bom-file-format-reference.md).

## References

This work is based on the following reverse-engineering efforts.
- [Bomutils]https://github.com/hogliux/bomutils
- [Darling]https://github.com/darlinghq/darling-installer
- [Bom]https://github.com/iineva/bom
- [Reverse engineering the .car file format (compiled Asset Catalogs)]https://blog.timac.org/2018/1018-reverse-engineering-the-car-file-format/
- [QuickLook plugin to visualize .car files (compiled Asset Catalogs)]https://blog.timac.org/2018/1112-quicklook-plugin-to-visualize-car-files/