Crate bbqr

Crate bbqr 

Source
Expand description

§BBQr - Protocol for spliting and joining large data into multiple QR codes

Rust Implementation of the BBQr Protocol spec

§Usage

§Split large data up

use bbqr::{
   encode::Encoding,
   file_type::FileType,
   join::Joined,
   qr::Version,
   split::{Split, SplitOptions},
};

let data: &[u8] = b"Hello, World!, but much larger";

// split the data using zlib encoding, and default options split the data using default options
let split = Split::try_from_data(data, FileType::UnicodeText, Default::default())
   .expect("Failed to split data");

// or split the data using zlib encoding, and custom options
let split = Split::try_from_data(
    data,
    FileType::UnicodeText,
    SplitOptions {
        encoding: Encoding::Zlib,
        min_split_number: 1,
        max_split_number: 100,
        min_version: Version::V03,
        max_version: Version::V30,
    },
).expect("Failed to split data");

// print out each of the parts
println!("{:#?}", split.parts);

// generate the qr codes
let qr_codes = split.generate_qr_codes();

§Join split QR codes

// get the parts from somewhere
let parts: Vec<String> = ...
// join the parts
let joined = Joined::try_from_parts(parts).expect("Failed to join parts");

/// joined.data has the raw bytes
match &joined.encoding {
  Encoding::Unicode => String::from_utf8(joined.data),
  other => {
    // do whatever
  }
}

§Join QR codes one by one

use bbqr::{continuous_join::{ContinuousJoiner, ContinuousJoinResult} };

// create new continuous joiner
let mut continuous_join = ContinuousJoiner::new();

let parts = vec![];

// add each part to the continuous joiner
for part in parts {
  let join_result = continuous_join.add_part(part).expect("Failed to add part");

  match join_result {
    ContinuousJoinResult::NotStarted => println!("Not started, part was empty"),
     
    ContinuousJoinResult::InProgress{parts_left} => {
      // print out the number of parts left
      println!("Parts left: {}", parts_left);
    }
     
    // if the part is the last part, then the data is ready
    ContinuousJoinResult::Complete(joined) => {
      // the data is ready, do something with it
    }
  }
}

Modules§

consts
continuous_join
Join the QR code parts one by one
decode
Join and decode parts of a string using the given encoding.
encode
Encoding of data for QR codes, currently supports HEX, Base32, or Zlib
file_type
File type enum for the different file types supported by the BBQr standard
header
The header module contains the header structure and parsing logic
join
Join multiple QR codes into one large piece of data
qr
Module for QR code related types, including the Version and ErrorCorrectionLevel
split
Split data into multiple parts for QR codes