Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/legneato/cups-sys
Low-level Rust interface to the CUPS printing library.
https://github.com/legneato/cups-sys
cups ipp printing rust rust-bindings
Last synced: 17 days ago
JSON representation
Low-level Rust interface to the CUPS printing library.
- Host: GitHub
- URL: https://github.com/legneato/cups-sys
- Owner: LegNeato
- License: apache-2.0
- Created: 2017-07-27T17:06:56.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2022-07-15T20:47:01.000Z (over 2 years ago)
- Last Synced: 2024-10-14T17:20:07.258Z (about 1 month ago)
- Topics: cups, ipp, printing, rust, rust-bindings
- Language: Rust
- Size: 1.77 MB
- Stars: 11
- Watchers: 3
- Forks: 6
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- License: LICENSE-APACHE
Awesome Lists containing this project
README
`cups-sys` [![Build Status](https://travis-ci.org/LegNeato/cups-sys.svg?branch=master)](https://travis-ci.org/LegNeato/cups-sys)
-----------------------------------------
Rust FFI bindings to [CUPS](https://www.cups.org/).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`](https://github.com/LegNeato/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`](https://github.com/servo/rust-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()
.as_ptr(),
// Name of the print job.
CString::new("Test print job")
.unwrap()
.as_ptr(),
(*destination).num_options,
(*destination).options
);
println!("{}", job_id);
cupsFreeDests(num_dests, dests);
}
```For a pure-Rust IPP implementation, check out [`ipp.rs`](https://github.com/dremon/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 cups_dest_t = mem::zeroed();
let num_dests = cupsGetDests(&mut dests as *mut _);
let destinations = std::slice::from_raw_parts(dests, num_dests 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:* Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)
* MIT License ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)