Crate ipp[][src]

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 based on reqwest crate. Requires async feature.
  • using any third-party HTTP client and send the serialized request manually.

This crate supports both synchronous and asynchronous operations. Asynchronous API is selected via async feature and is enabled by default.

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 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 = IppClient::new(uri);
     let resp = client.send(req).await?;
     if resp.header().status_code().is_success() {
         println!("{:?}", resp.attributes());
     }
     Ok(())
 }
 // using operations 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 operation = IppOperationBuilder::get_printer_attributes(uri.clone()).build();
     let client = IppClient::new(uri);
     let resp = client.send(operation).await?;
     if resp.header().status_code().is_success() {
         println!("{:?}", resp.attributes());
     }
     Ok(())
 }

Modules

Attribute-related structs

IPP operation builders

IPP client

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