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).
Sourcepub const fn encoding_modes(&self) -> EncodingModes
pub const fn encoding_modes(&self) -> EncodingModes
Data modes recorded while payload segments were pushed.
Sourcepub fn payload_bits_len(&self) -> usize
pub fn payload_bits_len(&self) -> usize
Number of payload bits before terminator and padding bits were added.
If push_terminator has not been called, this
returns the current bit length.
Sourcepub fn remaining_capacity_bits(
&self,
ec_level: EcLevel,
) -> Result<usize, QrError>
pub fn remaining_capacity_bits( &self, ec_level: EcLevel, ) -> Result<usize, QrError>
Remaining data capacity, in bits, before terminator and padding bits.
§Errors
Returns QrError::InvalidVersion when the stored version is
incompatible with ec_level.
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 zero-based index (
position - 1) and whose low nibble istotal - 1, - an 8-bit
paritybyte (the XOR of every byte of the original, un-split message — identical in every symbol).
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.
Auto Trait Implementations§
impl Freeze for Bits
impl RefUnwindSafe for Bits
impl Send for Bits
impl Sync for Bits
impl Unpin for Bits
impl UnsafeUnpin for Bits
impl UnwindSafe for Bits
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more