[][src]Crate ipp

IPP print protocol implementation for Rust

Usage examples:

 // using raw API
 use ipp::client::IppClientBuilder;
 use ipp::proto::{ipp::Operation, request::IppRequestResponse, IppVersion};
 use tokio::runtime::Runtime;

 fn main() -> Result<(), Box<dyn std::error::Error>> {
     let mut runtime = Runtime::new()?;
     let uri = "http://localhost:631/printers/test-printer";
     let req = IppRequestResponse::new(
         IppVersion::Ipp11,
         Operation::GetPrinterAttributes,
         Some(uri)
     );
     let client = IppClientBuilder::new(&uri).build();
     let resp = runtime.block_on(client.send_request(req))?;
     if resp.header().operation_status <= 2 {
         println!("result: {:?}", resp.attributes());
     }
     Ok(())
 }
 // using operations API
 use ipp::proto::{IppOperationBuilder, ipp::DelimiterTag};
 use ipp::client::IppClientBuilder;
 use tokio::runtime::Runtime;

 fn main() -> Result<(), Box<dyn std::error::Error>> {
     let mut runtime = Runtime::new()?;
     let operation = IppOperationBuilder::get_printer_attributes().build();
     let client = IppClientBuilder::new("http://localhost:631/printers/test-printer").build();
     let attrs = runtime.block_on(client.send(operation))?;
     for (_, v) in attrs.groups_of(DelimiterTag::PrinterAttributes)[0].attributes() {
         println!("{}: {}", v.name(), v.value());
     }
     Ok(())
 }

Re-exports

pub use ipp_proto as proto;
pub use ipp_client as client;