cups-sys Build Status

Rust FFI bindings to CUPS.

Background

CUPS is the standards-based, open source printing system developed by Apple Inc. for macOS and other UNIX-like operating systems. CUPS uses the Internet Printing Protocol (IPP) to support printing to local and network printers.

This library (cups-sys) provides a low-level interface to the CUPS library installed on your system. The binding is generated at build time via the bindgen project.

I just want to print from Rust

```rust use std::mem; use std::ptr; use cups-sys::*;

unsafe { let mut dests: mut cups_dest_t = mem::zeroed(); let num_dests = cupsGetDests(&mut dests as *mut _); // Get the default printer. let destination: cups_dest_t = cupsGetDest(ptr::null(), ptr::null(), num_dests, dests); // Print a real page. let job_id: i32 = cupsPrintFile( (destination).name, // File to print. CString::new("/path/to/file") .unwrap() .asptr(), // Name of the print job. CString::new("Test print job") .unwrap() .asptr(), (destination).num_options, (destination).options ); println!("{}", jobid); cupsFreeDests(numdests, dests); } ```

For a pure-Rust IPP implementation, check out ipp.rs.

Documentation

The auto-generated FFI reference docs can be found at https://legneato.github.io/cups-sys/cups_sys/.

The original CUPS API documentation (with examples) can be found at https://www.cups.org/doc/api-cups.html.

Example usage

```rust unsafe { let mut dests: *mut cupsdestt = mem::zeroed(); let numdests = cupsGetDests(&mut dests as *mut _); let destinations = std::slice::fromrawparts(dests, numdests as usize);

for destination in destinations {
    let c_printer_name = CStr::from_ptr((*destination).name);
    let printer_name = c_printer_name.to_string_lossy();

    let c_make_and_model = cupsGetOption(
        CString::new("printer-make-and-model").unwrap().as_ptr(),
        destination.num_options,
        destination.options
    );
    let make_and_model = CStr::from_ptr(c_make_and_model).to_string_lossy();
    println!("{} ({})", printer_name, make_and_model);
}

cupsFreeDests(num_dests, dests);

} ```

License

cups-sys is licensed under either of the following, at your option: