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 APIs.async-client
- enables asynchronous IPP client based onreqwest
crate, impliesasync
feature.client
- enables blocking IPP client based onureq
crate.async-client-tls
- enables asynchronous IPP client with TLS, using native-tls backend. Impliesasync-client
feature.client-tls
- enables blocking IPP client with TLS, using native-tls backend. Impliesclient
feature.async-client-rustls
- enables asynchronous IPP client with TLS, using rustls backend. Impliesasync-client
feature.client-rustls
- enables blocking IPP client with TLS, using rustls backend. Impliesclient
feature.
By default, the following feature is enabled: async-client-tls
.
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.
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
- Attribute-related structs
- client
- IPP client
- error
- IPP error
- model
- Base IPP definitions and tags
- operation
- High-level IPP operation abstractions
- parser
- IPP stream parser
- payload
- IPP payload
- prelude
- Common imports
- reader
- IPP reader
- request
- IPP request
- util
- IPP helper functions
- value
- IPP value
Structs§
- IppHeader
- IPP request and response header