hpkg 1.0.0

A native Rust crate to parse Haiku's binary package and repo formats
Documentation
extern crate hpkg;

use std::{env, process};
use hpkg::package_writer::PackageWriter;
use hpkg::hpkg_common::B_HPKG_COMPRESSION_ZSTD;

/// Simple HPKG writer example: creates a test package from files on disk.
fn main() {
    let args: Vec<String> = env::args().collect();
    if args.len() != 2 {
        eprintln!("usage: hpkg_write <output.hpkg>");
        eprintln!();
        eprintln!("Creates a sample HPKG archive with inline data for testing.");
        process::exit(1);
    }

    let output = &args[1];

    let mut writer = PackageWriter::new(output);
    writer.set_name("example_package")
          .set_summary("An example HPKG archive created by hpkg-rs")
          .set_vendor("hpkg-rs Project")
          .set_architecture(4) // x86_64
          .set_url("https://codeberg.org/kallisti5/hpkg-rs")
          .set_compression(B_HPKG_COMPRESSION_ZSTD);

    // Add files with inline content
    writer.add_file("bin/hello", b"#!/bin/sh\necho Hello from Haiku!\n");
    writer.add_file("data/readme.txt", b"This is a test package created with hpkg-rs.\n");

    // Add directories
    writer.add_directory("data/subdir");
    writer.add_directory("bin");

    // Add a symbolic link
    writer.add_symlink("bin/hi", "hello");

    // Finalize and write to disk
    writer.finish().unwrap_or_else(|e| {
        eprintln!("Error writing HPKG: {}", e);
        process::exit(1);
    });

    println!("Created {}", output);
}