4 个版本
使用旧的 Rust 2015
0.1.4 | 2020年4月29日 |
---|---|
0.1.3 | 2017年9月15日 |
0.1.2 |
|
0.1.1 | 2017年8月5日 |
0.1.0 | 2017年7月27日 |
#5 in #ipp
每月下载量 36
10KB
106 代码行
cups-sys
Rust FFI 绑定到 CUPS.
背景
CUPS 是由 Apple Inc. 开发的基于标准的开源打印系统,用于 macOS 和其他类 UNIX 操作系统。CUPS 使用互联网打印协议 (IPP) 以支持本地和网络打印机的打印。
此库 (cups-sys
) 为您系统上安装的 CUPS 库提供低级接口。绑定是通过 bindgen
项目在构建时生成的。
只想从 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);
}
对于纯 Rust IPP 实现,请查看 ipp.rs
.
文档
自动生成的 FFI 参考文档可以在 https://legneato.github.io/cups-sys/cups_sys/ 找到。
原始 CUPS API 文档(包含示例)可以在 https://www.cups.org/doc/api-cups.html 找到。
示例用法
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);
}
许可
cups-sys
根据您的选择,受以下任一许可证的约束
- Apache License, Version 2.0, (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT License (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
无运行时依赖
~0–2.3MB
~44K SLoC