Expand description
IPP print protocol implementation for Rust. This crate can be used in several ways:
- using the low-level request/response API and building the requests manually.
- using the higher-level operations API with builders. Currently only a subset of all IPP operations is supported.
- using the built-in IPP client.
- using any third-party HTTP client and send the serialized request manually.
This crate supports both synchronous and asynchronous operations. The following feature flags are supported:
async
- enables asynchronous APIsasync-client
- enables asynchronous IPP client based onreqwest
crate, impliesasync
featureclient
- enables blocking IPP client based onureq
crateasync-client-tls
- enables asynchronous IPP client with TLS supportclient-tls
- enables blocking IPP client with TLS support
By default, all features are enabled.
Implementation notes:
- all RFC IPP values are supported including arrays and collections, for both de- and serialization.
- this crate is also suitable for building IPP servers, however the example is not provided yet.
- some operations (e.g. CUPS-specific) require authorization which can be supplied in the printer URI.
Usage examples:
// using low-level async API
use ipp::prelude::*;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let uri: Uri = "http://localhost:631/printers/test-printer".parse()?;
let req = IppRequestResponse::new(
IppVersion::v1_1(),
Operation::GetPrinterAttributes,
Some(uri.clone())
);
let client = AsyncIppClient::new(uri);
let resp = client.send(req).await?;
if resp.header().status_code().is_success() {
println!("{:?}", resp.attributes());
}
Ok(())
}
// using blocking operations API
use ipp::prelude::*;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let uri: Uri = "http://localhost:631/printers/test-printer".parse()?;
let operation = IppOperationBuilder::get_printer_attributes(uri.clone()).build();
let client = IppClient::new(uri);
let resp = client.send(operation)?;
if resp.header().status_code().is_success() {
println!("{:?}", resp.attributes());
}
Ok(())
}
Modules
- Attribute-related structs
- IPP client
- IPP error
- Base IPP definitions and tags
- High-level IPP operation abstractions
- IPP stream parser
- IPP payload
- Common imports
- IPP reader
- IPP request
- IPP helper functions
- IPP value
Structs
- IPP request and response header