ipp - Rust (original) (raw)
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 onreqwestcrate, impliesasyncfeature.client- enables blocking IPP client based onureqcrate.async-client-tls- enables asynchronous IPP client with TLS, using native-tls backend. Impliesasync-clientfeature.client-tls- enables blocking IPP client with TLS, using native-tls backend. Impliesclientfeature.async-client-rustls- enables asynchronous IPP client with TLS, using rustls backend. Impliesasync-clientfeature.client-rustls- enables blocking IPP client with TLS, using rustls backend. Impliesclientfeature.
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(())
}
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
IPP request and response header