Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?


Failed to load latest commit information.
Latest commit message
Commit time
October 14, 2023 10:48
October 14, 2023 10:48
November 21, 2019 12:34
October 14, 2023 10:48
October 14, 2023 10:48
March 21, 2021 09:21

IPP protocol implementation for Rust. This crate implements IPP protocol as defined in RFC 8010, RFC 8011.

It supports both synchronous and asynchronous operations (requests and responses) which is controlled by the async feature flag.

The following build-time features are supported:

  • async - enables asynchronous APIs
  • async-client - enables asynchronous IPP client based on reqwest crate, implies async feature
  • client - enables blocking IPP client based on ureq crate
  • async-client-tls - enables asynchronous IPP client with TLS
  • client-tls - enables blocking IPP client with TLS

By default, all features are enabled. Use default-features=false dependency option to disable them.


Usage example for async client:

use ipp::prelude::*;

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 = AsyncIppClient::new(uri);
    let resp = client.send(operation).await?;
    if resp.header().status_code().is_success() {
        let printer_attrs = resp
        for (_, v) in printer_attrs.attributes() {
            println!("{}: {}",, v.value());

For more usage examples please check the examples folder.


Licensed under MIT or Apache license (LICENSE-MIT or LICENSE-APACHE)