compression-rs 0.2.4

Safe Rust bindings for Apple's Compression and AppleArchive APIs on macOS
Documentation
use std::ffi::{c_char, c_void};

unsafe extern "C" {
    pub fn compression_rs_aa_extract_archive_output_stream_open(
        dir: *const c_char,
        flags: u64,
        n_threads: i32,
    ) -> *mut c_void;
    pub fn compression_rs_aa_convert_archive_output_stream_open(
        handle: *mut c_void,
        insert_key_set: *mut c_void,
        remove_key_set: *mut c_void,
        flags: u64,
        n_threads: i32,
    ) -> *mut c_void;
    pub fn compression_rs_aa_encode_archive_output_stream_open(
        handle: *mut c_void,
        flags: u64,
        n_threads: i32,
    ) -> *mut c_void;
    pub fn compression_rs_aa_decode_archive_input_stream_open(
        handle: *mut c_void,
        flags: u64,
        n_threads: i32,
    ) -> *mut c_void;
    pub fn compression_rs_aa_archive_stream_write_header(
        handle: *mut c_void,
        header: *mut c_void,
    ) -> i32;
    pub fn compression_rs_aa_archive_stream_write_blob(
        handle: *mut c_void,
        key: u32,
        buffer: *const u8,
        length: usize,
    ) -> i32;
    pub fn compression_rs_aa_archive_stream_read_header_new(
        handle: *mut c_void,
        status: *mut i32,
    ) -> *mut c_void;
    pub fn compression_rs_aa_archive_stream_read_header_into(
        handle: *mut c_void,
        header: *mut c_void,
    ) -> i32;
    pub fn compression_rs_aa_archive_stream_read_blob(
        handle: *mut c_void,
        key: u32,
        buffer: *mut u8,
        length: usize,
    ) -> i32;
    pub fn compression_rs_aa_archive_stream_cancel(handle: *mut c_void);
    pub fn compression_rs_aa_archive_stream_abort(handle: *mut c_void);
    pub fn compression_rs_aa_archive_stream_close(handle: *mut c_void) -> i32;
    pub fn compression_rs_aa_archive_stream_write_path_list(
        handle: *mut c_void,
        path_list: *mut c_void,
        key_set: *mut c_void,
        dir: *const c_char,
        flags: u64,
        n_threads: i32,
    ) -> i32;
    pub fn compression_rs_aa_archive_stream_process(
        input: *mut c_void,
        output: *mut c_void,
        flags: u64,
        n_threads: i32,
    ) -> i64;
    pub fn compression_rs_aa_archive_stream_release(handle: *mut c_void);
}

pub type CustomArchiveStreamWriteHeaderProc =
    unsafe extern "C" fn(arg: *mut c_void, header: *mut c_void) -> i32;
pub type CustomArchiveStreamWriteBlobProc =
    unsafe extern "C" fn(arg: *mut c_void, key: u32, buffer: *const c_void, length: usize) -> i32;
pub type CustomArchiveStreamReadHeaderProc =
    unsafe extern "C" fn(arg: *mut c_void, header: *mut *mut c_void) -> i32;
pub type CustomArchiveStreamReadBlobProc =
    unsafe extern "C" fn(arg: *mut c_void, key: u32, buffer: *mut c_void, length: usize) -> i32;
pub type CustomArchiveStreamCancelProc = unsafe extern "C" fn(arg: *mut c_void);
pub type CustomArchiveStreamAbortProc = unsafe extern "C" fn(arg: *mut c_void);
pub type CustomArchiveStreamCloseProc = unsafe extern "C" fn(arg: *mut c_void) -> i32;

unsafe extern "C" {
    pub fn compression_rs_aa_custom_archive_stream_open() -> *mut c_void;
    pub fn compression_rs_aa_custom_archive_stream_set_data(handle: *mut c_void, data: *mut c_void);
    pub fn compression_rs_aa_custom_archive_stream_set_write_header_proc(
        handle: *mut c_void,
        proc: Option<CustomArchiveStreamWriteHeaderProc>,
    );
    pub fn compression_rs_aa_custom_archive_stream_set_write_blob_proc(
        handle: *mut c_void,
        proc: Option<CustomArchiveStreamWriteBlobProc>,
    );
    pub fn compression_rs_aa_custom_archive_stream_set_read_header_proc(
        handle: *mut c_void,
        proc: Option<CustomArchiveStreamReadHeaderProc>,
    );
    pub fn compression_rs_aa_custom_archive_stream_set_read_blob_proc(
        handle: *mut c_void,
        proc: Option<CustomArchiveStreamReadBlobProc>,
    );
    pub fn compression_rs_aa_custom_archive_stream_set_cancel_proc(
        handle: *mut c_void,
        proc: Option<CustomArchiveStreamCancelProc>,
    );
    pub fn compression_rs_aa_custom_archive_stream_set_abort_proc(
        handle: *mut c_void,
        proc: Option<CustomArchiveStreamAbortProc>,
    );
    pub fn compression_rs_aa_custom_archive_stream_set_close_proc(
        handle: *mut c_void,
        proc: Option<CustomArchiveStreamCloseProc>,
    );
}

pub type EntryMessageProc = unsafe extern "C" fn(
    arg: *mut c_void,
    message: u32,
    path: *const c_char,
    data: *mut c_void,
) -> i32;

unsafe extern "C" {
    pub fn compression_rs_aa_extract_archive_output_stream_open_with_messages(
        dir: *const c_char,
        flags: u64,
        n_threads: i32,
        arg: *mut c_void,
        proc: Option<EntryMessageProc>,
    ) -> *mut c_void;
    pub fn compression_rs_aa_encode_archive_output_stream_open_with_messages(
        handle: *mut c_void,
        flags: u64,
        n_threads: i32,
        arg: *mut c_void,
        proc: Option<EntryMessageProc>,
    ) -> *mut c_void;
    pub fn compression_rs_aa_decode_archive_input_stream_open_with_messages(
        handle: *mut c_void,
        flags: u64,
        n_threads: i32,
        arg: *mut c_void,
        proc: Option<EntryMessageProc>,
    ) -> *mut c_void;
    pub fn compression_rs_aa_convert_archive_output_stream_open_with_messages(
        handle: *mut c_void,
        insert_key_set: *mut c_void,
        remove_key_set: *mut c_void,
        flags: u64,
        n_threads: i32,
        arg: *mut c_void,
        proc: Option<EntryMessageProc>,
    ) -> *mut c_void;
    pub fn compression_rs_aa_archive_stream_write_path_list_with_messages(
        handle: *mut c_void,
        path_list: *mut c_void,
        key_set: *mut c_void,
        dir: *const c_char,
        flags: u64,
        n_threads: i32,
        arg: *mut c_void,
        proc: Option<EntryMessageProc>,
    ) -> i32;
    pub fn compression_rs_aa_archive_stream_process_with_messages(
        input: *mut c_void,
        output: *mut c_void,
        flags: u64,
        n_threads: i32,
        arg: *mut c_void,
        proc: Option<EntryMessageProc>,
    ) -> i64;
}