pub struct Bits { /* private fields */ }Expand description
The Bits structure stores the encoded data for a QR code.
Implementations§
Source§impl Bits
impl Bits
Sourcepub fn push_number_checked(
&mut self,
n: usize,
number: usize,
) -> Result<(), QrError>
pub fn push_number_checked( &mut self, n: usize, number: usize, ) -> Result<(), QrError>
Pushes an N-bit big-endian integer to the end of the bits, and check that the number does not overflow the bits.
Returns Err(QrError::DataTooLong) on overflow.
Sourcepub fn into_bytes(self) -> Vec<u8> ⓘ
pub fn into_bytes(self) -> Vec<u8> ⓘ
Convert the bits into a byte vector.
Sourcepub fn max_len(&self, ec_level: EcLevel) -> Result<usize, QrError>
pub fn max_len(&self, ec_level: EcLevel) -> Result<usize, QrError>
The maximum number of bits allowed by the provided QR code version and error correction level.
§Errors
Returns Err(QrError::InvalidVersion) if it is not valid to use the
ec_level for the given version (e.g. Version::Micro(1) with
EcLevel::H).
Source§impl Bits
impl Bits
Sourcepub fn push_mode_indicator(&mut self, mode: ExtendedMode) -> Result<(), QrError>
pub fn push_mode_indicator(&mut self, mode: ExtendedMode) -> Result<(), QrError>
Push the mode indicator to the end of the bits.
§Errors
If the mode is not supported in the provided version, this method
returns Err(QrError::UnsupportedCharacterSet).
Source§impl Bits
impl Bits
Sourcepub fn push_eci_designator(
&mut self,
eci_designator: u32,
) -> Result<(), QrError>
pub fn push_eci_designator( &mut self, eci_designator: u32, ) -> Result<(), QrError>
Push an ECI (Extended Channel Interpretation) designator to the bits.
An ECI designator is a 6-digit number to specify the character set of
the following binary data. After calling this method, one could call
.push_byte_data() or similar methods to insert the actual data, e.g.
#![allow(unused_must_use)]
use qrcode_core::bits::Bits;
use qrcode_core::types::Version;
let mut bits = Bits::new(Version::Normal(1));
bits.push_eci_designator(9); // 9 = ISO-8859-7 (Greek).
bits.push_byte_data(b"\xa1\xa2\xa3\xa4\xa5"); // ΑΒΓΔΕThe full list of ECI designator values can be found from http://strokescribe.com/en/ECI.html. Some example values are:
| ECI # | Character set |
|---|---|
| 3 | ISO-8859-1 (Western European) |
| 20 | Shift JIS (Japanese) |
| 23 | Windows 1252 (Latin 1) (Western European) |
| 25 | UTF-16 Big Endian |
| 26 | UTF-8 |
| 28 | Big 5 (Traditional Chinese) |
| 29 | GB-18030 (Simplified Chinese) |
| 30 | EUC-KR (Korean) |
§Errors
If the QR code version does not support ECI, this method will return
Err(QrError::UnsupportedCharacterSet).
If the designator is outside the expected range, this method will
return Err(QrError::InvalidECIDesignator).
Source§impl Bits
impl Bits
Sourcepub fn push_kanji_data(&mut self, data: &[u8]) -> Result<(), QrError>
pub fn push_kanji_data(&mut self, data: &[u8]) -> Result<(), QrError>
Encodes Shift JIS double-byte data to the bits.
§Errors
Returns Err(QrError::DataTooLong) on overflow.
Returns Err(QrError::InvalidCharacter) if the data is not Shift JIS
double-byte data (e.g. if the length of data is not an even number).
Source§impl Bits
impl Bits
Sourcepub fn push_mode_data<M>(&mut self, data: &[u8]) -> Result<(), QrError>where
M: EncodingMode,
pub fn push_mode_data<M>(&mut self, data: &[u8]) -> Result<(), QrError>where
M: EncodingMode,
Encodes data with a type-level QR encoding mode.
This is the type-safe counterpart to calling one of
push_numeric_data,
push_alphanumeric_data,
push_byte_data, or
push_kanji_data directly.
§Errors
Returns QrError::InvalidCharacter when data is not valid for M.
Returns the same length or version errors as the mode-specific push
method after validation succeeds.
Source§impl Bits
impl Bits
Sourcepub fn push_fnc1_first_position(&mut self) -> Result<(), QrError>
pub fn push_fnc1_first_position(&mut self) -> Result<(), QrError>
Encodes an indicator that the following data are formatted according to the UCC/EAN Application Identifiers standard.
#![allow(unused_must_use)]
use qrcode_core::bits::Bits;
use qrcode_core::types::Version;
let mut bits = Bits::new(Version::Normal(1));
bits.push_fnc1_first_position();
bits.push_numeric_data(b"01049123451234591597033130128");
bits.push_alphanumeric_data(b"%10ABC123");In QR code, the character % is used as the data field separator (0x1D).
§Errors
If the mode is not supported in the provided version, this method
returns Err(QrError::UnsupportedCharacterSet).
Sourcepub fn push_fnc1_second_position(
&mut self,
application_indicator: u8,
) -> Result<(), QrError>
pub fn push_fnc1_second_position( &mut self, application_indicator: u8, ) -> Result<(), QrError>
Encodes an indicator that the following data are formatted in accordance with specific industry or application specifications previously agreed with AIM International.
#![allow(unused_must_use)]
use qrcode_core::bits::Bits;
use qrcode_core::types::Version;
let mut bits = Bits::new(Version::Normal(1));
bits.push_fnc1_second_position(37);
bits.push_alphanumeric_data(b"AA1234BBB112");
bits.push_byte_data(b"text text text text\r");If the application indicator is a single Latin alphabet (a–z / A–Z), please pass in its ASCII value + 100:
bits.push_fnc1_second_position(b'A' + 100);§Errors
If the mode is not supported in the provided version, this method
returns Err(QrError::UnsupportedCharacterSet).
Source§impl Bits
impl Bits
Sourcepub fn push_structured_append_header(
&mut self,
position: u8,
total: u8,
parity: u8,
) -> Result<(), QrError>
pub fn push_structured_append_header( &mut self, position: u8, total: u8, parity: u8, ) -> Result<(), QrError>
Pushes a Structured Append header (ISO/IEC 18004 §7.4) to the front of the bit stream.
Structured Append splits one logical message across 2..=16 QR symbols. Every symbol in the sequence carries this 20-bit header as the very first thing in its bit stream, before the data mode indicator:
- 4-bit mode indicator
0011, - an 8-bit symbol-sequence indicator whose high nibble is this
symbol’s
position(1-based,1..=total) and whose low nibble is thetotalsymbol count (2..=16), - an 8-bit
paritybyte (the XOR of every byte of the original, un-split message — identical in every symbol).
A position/total of 16 wraps to nibble 0 (the only encoding of 16
in four bits); a spec-aware reader reads nibble 0 as 16.
Structured Append is not valid for Micro QR; this method returns
Err(QrError::UnsupportedCharacterSet) for a Micro QR version.
§Errors
Returns QrError::UnsupportedCharacterSet on a Micro QR version, and
QrError::InvalidStructuredAppend if total is not 2..=16 or
position is not 1..=total.
use qrcode_core::bits::Bits;
use qrcode_core::types::Version;
let mut bits = Bits::new(Version::Normal(1));
bits.push_structured_append_header(1, 3, 0x5a);
// First symbol of a 3-symbol sequence; parity 0x5a.Source§impl Bits
impl Bits
Sourcepub fn push_terminator(&mut self, ec_level: EcLevel) -> Result<(), QrError>
pub fn push_terminator(&mut self, ec_level: EcLevel) -> Result<(), QrError>
Pushes the ending bits to indicate no more data.
§Errors
Returns Err(QrError::DataTooLong) on overflow.
Returns Err(QrError::InvalidVersion) if it is not valid to use the
ec_level for the given version (e.g. Version::Micro(1) with
EcLevel::H).
Source§impl Bits
impl Bits
Sourcepub fn push_segments<I>(
&mut self,
data: &[u8],
segments_iter: I,
) -> Result<(), QrError>
pub fn push_segments<I>( &mut self, data: &[u8], segments_iter: I, ) -> Result<(), QrError>
Push a segmented data to the bits, and then terminate it.
§Errors
Returns Err(QrError::DataTooLong) on overflow.
Returns Err(QrError::InvalidData) if the segment refers to incorrectly
encoded byte sequences.