fairly major reorganization and clippy cleanup

This commit is contained in:
Henry
2023-01-10 15:28:36 -06:00
parent 59183a5383
commit a32de48f34
42 changed files with 199 additions and 166 deletions

View File

@@ -79,7 +79,8 @@ fn test_aztec_rxing_result_sample() {
// Test that we can tolerate errors in the parameter locator bits // Test that we can tolerate errors in the parameter locator bits
fn test_error_in_parameter_locator(data: &str) { fn test_error_in_parameter_locator(data: &str) {
let aztec = encoder::encoder::encode(data, 25, encoder::encoder::DEFAULT_AZTEC_LAYERS) let aztec =
encoder::aztec_encoder::encode(data, 25, encoder::aztec_encoder::DEFAULT_AZTEC_LAYERS)
.expect("encode should create"); .expect("encode should create");
// dbg!(aztec.getMatrix().to_string()); // dbg!(aztec.getMatrix().to_string());
let mut random = rand::thread_rng(); //Random(aztec.getMatrix().hashCode()); // pseudo-random, but deterministic let mut random = rand::thread_rng(); //Random(aztec.getMatrix().hashCode()); // pseudo-random, but deterministic

View File

@@ -28,7 +28,7 @@ use crate::{
BarcodeFormat, EncodeHintType, EncodeHintValue, RXingResultPoint, BarcodeFormat, EncodeHintType, EncodeHintValue, RXingResultPoint,
}; };
use super::{encoder::encoder, AztecWriter}; use super::{encoder::aztec_encoder, AztecWriter};
use crate::Writer; use crate::Writer;
@@ -180,10 +180,10 @@ fn testAztecWriter() {
let matrix = writer let matrix = writer
.encode(data, &BarcodeFormat::AZTEC, 0, 0) .encode(data, &BarcodeFormat::AZTEC, 0, 0)
.expect("matrix must exist"); .expect("matrix must exist");
let aztec = encoder::encode( let aztec = aztec_encoder::encode(
data, data,
encoder::DEFAULT_EC_PERCENT, aztec_encoder::DEFAULT_EC_PERCENT,
encoder::DEFAULT_AZTEC_LAYERS, aztec_encoder::DEFAULT_AZTEC_LAYERS,
) )
.expect("encode should succeed"); .expect("encode should succeed");
let expected_matrix = aztec.getMatrix(); let expected_matrix = aztec.getMatrix();
@@ -599,15 +599,15 @@ fn testUserSpecifiedLayers2() {
fn doTestUserSpecifiedLayers(userSpecifiedLayers: i32) { fn doTestUserSpecifiedLayers(userSpecifiedLayers: i32) {
let alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; let alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
let mut aztec = encoder::encode(alphabet, 25, -2).expect("should encode"); let mut aztec = aztec_encoder::encode(alphabet, 25, -2).expect("should encode");
assert_eq!(2, aztec.getLayers()); assert_eq!(2, aztec.getLayers());
assert!(aztec.isCompact()); assert!(aztec.isCompact());
aztec = encoder::encode(alphabet, 25, 32).expect("should encode"); aztec = aztec_encoder::encode(alphabet, 25, 32).expect("should encode");
assert_eq!(32, aztec.getLayers()); assert_eq!(32, aztec.getLayers());
assert!(!aztec.isCompact()); assert!(!aztec.isCompact());
encoder::encode(alphabet, 25, userSpecifiedLayers).expect("encode"); aztec_encoder::encode(alphabet, 25, userSpecifiedLayers).expect("encode");
} }
#[test] #[test]
@@ -618,7 +618,7 @@ fn testBorderCompact4CaseFailed() {
let alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; let alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
// encodes as 26 * 5 * 4 = 520 bits of data // encodes as 26 * 5 * 4 = 520 bits of data
let alphabet4 = format!("{}{}{}{}", alphabet, alphabet, alphabet, alphabet); let alphabet4 = format!("{}{}{}{}", alphabet, alphabet, alphabet, alphabet);
encoder::encode(&alphabet4, 0, -4).expect("encode"); aztec_encoder::encode(&alphabet4, 0, -4).expect("encode");
} }
#[test] #[test]
@@ -630,14 +630,14 @@ fn testBorderCompact4Case() {
let alphabet4 = format!("{}{}{}{}", alphabet, alphabet, alphabet, alphabet); let alphabet4 = format!("{}{}{}{}", alphabet, alphabet, alphabet, alphabet);
// If we just try to encode it normally, it will go to a non-compact 4 layer // If we just try to encode it normally, it will go to a non-compact 4 layer
let mut aztecCode = let mut aztecCode = aztec_encoder::encode(&alphabet4, 0, aztec_encoder::DEFAULT_AZTEC_LAYERS)
encoder::encode(&alphabet4, 0, encoder::DEFAULT_AZTEC_LAYERS).expect("Should encode"); .expect("Should encode");
assert!(!aztecCode.isCompact()); assert!(!aztecCode.isCompact());
assert_eq!(4, aztecCode.getLayers()); assert_eq!(4, aztecCode.getLayers());
// But shortening the string to 100 bytes (500 bits of data), compact works fine, even if we // But shortening the string to 100 bytes (500 bits of data), compact works fine, even if we
// include more error checking. // include more error checking.
aztecCode = encoder::encode(&alphabet4[..100], 10, encoder::DEFAULT_AZTEC_LAYERS) aztecCode = aztec_encoder::encode(&alphabet4[..100], 10, aztec_encoder::DEFAULT_AZTEC_LAYERS)
.expect("should encode"); .expect("should encode");
assert!(aztecCode.isCompact()); assert!(aztecCode.isCompact());
assert_eq!(4, aztecCode.getLayers()); assert_eq!(4, aztecCode.getLayers());
@@ -646,7 +646,8 @@ fn testBorderCompact4Case() {
// Helper routines // Helper routines
fn testEncode(data: &str, compact: bool, layers: u32, expected: &str) { fn testEncode(data: &str, compact: bool, layers: u32, expected: &str) {
let aztec = encoder::encode(data, 33, encoder::DEFAULT_AZTEC_LAYERS).expect("should encode"); let aztec = aztec_encoder::encode(data, 33, aztec_encoder::DEFAULT_AZTEC_LAYERS)
.expect("should encode");
assert_eq!( assert_eq!(
compact, compact,
aztec.isCompact(), aztec.isCompact(),
@@ -661,7 +662,8 @@ fn testEncode(data: &str, compact: bool, layers: u32, expected: &str) {
} }
fn testEncodeDecode(data: &str, compact: bool, layers: u32) { fn testEncodeDecode(data: &str, compact: bool, layers: u32) {
let aztec = encoder::encode(data, 25, encoder::DEFAULT_AZTEC_LAYERS).expect("should encode"); let aztec = aztec_encoder::encode(data, 25, aztec_encoder::DEFAULT_AZTEC_LAYERS)
.expect("should encode");
assert_eq!( assert_eq!(
compact, compact,
aztec.isCompact(), aztec.isCompact(),
@@ -737,8 +739,12 @@ fn testWriter(
Some(cs) => cs, Some(cs) => cs,
None => encoding::all::ISO_8859_1, None => encoding::all::ISO_8859_1,
}; };
let aztec = let aztec = aztec_encoder::encode_with_charset(
encoder::encode_with_charset(data, ecc_percent, encoder::DEFAULT_AZTEC_LAYERS, cset) data,
ecc_percent,
aztec_encoder::DEFAULT_AZTEC_LAYERS,
cset,
)
.expect("encode should encode"); .expect("encode should encode");
assert_eq!( assert_eq!(
compact, compact,
@@ -794,7 +800,7 @@ fn getPseudoRandom() -> rand::rngs::ThreadRng {
} }
fn testModeMessageComplex(compact: bool, layers: u32, words: u32, expected: &str) { fn testModeMessageComplex(compact: bool, layers: u32, words: u32, expected: &str) {
let indata = encoder::generateModeMessage(compact, layers, words).expect("generate mode"); let indata = aztec_encoder::generateModeMessage(compact, layers, words).expect("generate mode");
assert_eq!( assert_eq!(
stripSpace(expected), stripSpace(expected),
stripSpace(&indata.to_string()), stripSpace(&indata.to_string()),
@@ -804,7 +810,7 @@ fn testModeMessageComplex(compact: bool, layers: u32, words: u32, expected: &str
fn testStuffBits(wordSize: usize, bits: &str, expected: &str) { fn testStuffBits(wordSize: usize, bits: &str, expected: &str) {
let indata = toBitArray(bits); let indata = toBitArray(bits);
let stuffed = encoder::stuffBits(&indata, wordSize); let stuffed = aztec_encoder::stuffBits(&indata, wordSize);
assert_eq!( assert_eq!(
stripSpace(expected), stripSpace(expected),
stripSpace(&stuffed.to_string()), stripSpace(&stuffed.to_string()),

View File

@@ -23,7 +23,7 @@ use crate::{
Writer, Writer,
}; };
use super::encoder::{encoder, AztecCode}; use super::encoder::{aztec_encoder, AztecCode};
/** /**
* Renders an Aztec code as a {@link BitMatrix}. * Renders an Aztec code as a {@link BitMatrix}.
@@ -51,8 +51,8 @@ impl Writer for AztecWriter {
hints: &std::collections::HashMap<crate::EncodeHintType, crate::EncodeHintValue>, hints: &std::collections::HashMap<crate::EncodeHintType, crate::EncodeHintValue>,
) -> Result<crate::common::BitMatrix, crate::exceptions::Exceptions> { ) -> Result<crate::common::BitMatrix, crate::exceptions::Exceptions> {
let mut charset = None; // Do not add any ECI code by default let mut charset = None; // Do not add any ECI code by default
let mut ecc_percent = encoder::DEFAULT_EC_PERCENT; let mut ecc_percent = aztec_encoder::DEFAULT_EC_PERCENT;
let mut layers = encoder::DEFAULT_AZTEC_LAYERS; let mut layers = aztec_encoder::DEFAULT_AZTEC_LAYERS;
if hints.contains_key(&EncodeHintType::CHARACTER_SET) { if hints.contains_key(&EncodeHintType::CHARACTER_SET) {
if let EncodeHintValue::CharacterSet(cset_name) = hints if let EncodeHintValue::CharacterSet(cset_name) = hints
.get(&EncodeHintType::CHARACTER_SET) .get(&EncodeHintType::CHARACTER_SET)
@@ -113,9 +113,9 @@ fn encode(
} }
let aztec = if let Some(cset) = charset { let aztec = if let Some(cset) = charset {
// dbg!(cset.name(), cset.whatwg_name()); // dbg!(cset.name(), cset.whatwg_name());
encoder::encode_with_charset(contents, ecc_percent, layers, cset)? aztec_encoder::encode_with_charset(contents, ecc_percent, layers, cset)?
} else { } else {
encoder::encode(contents, ecc_percent, layers)? aztec_encoder::encode(contents, ecc_percent, layers)?
}; };
renderRXingResult(&aztec, width, height) renderRXingResult(&aztec, width, height)
} }

View File

@@ -5,7 +5,7 @@ mod simple_token;
mod state; mod state;
mod token; mod token;
pub mod encoder; pub mod aztec_encoder;
pub use aztec_code::*; pub use aztec_code::*;
pub use binary_shift_token::*; pub use binary_shift_token::*;

View File

@@ -100,6 +100,7 @@ impl AddressBookParsedRXingResult {
) )
} }
#[allow(clippy::too_many_arguments)]
pub fn with_details( pub fn with_details(
names: Vec<String>, names: Vec<String>,
nicknames: Vec<String>, nicknames: Vec<String>,

View File

@@ -97,6 +97,7 @@ impl ParsedRXingResult for CalendarParsedRXingResult {
} }
impl CalendarParsedRXingResult { impl CalendarParsedRXingResult {
#[allow(clippy::too_many_arguments)]
pub fn new( pub fn new(
summary: String, summary: String,
startString: String, startString: String,

View File

@@ -73,6 +73,7 @@ impl ExpandedProductParsedRXingResult {
pub const KILOGRAM: &'static str = "KG"; pub const KILOGRAM: &'static str = "KG";
pub const POUND: &'static str = "LB"; pub const POUND: &'static str = "LB";
#[allow(clippy::too_many_arguments)]
pub fn new( pub fn new(
rawText: String, rawText: String,
productID: String, productID: String,

View File

@@ -62,6 +62,7 @@ impl ParsedRXingResult for VINParsedRXingResult {
} }
} }
impl VINParsedRXingResult { impl VINParsedRXingResult {
#[allow(clippy::too_many_arguments)]
pub fn new( pub fn new(
vin: String, vin: String,
world_manufacturer_id: String, world_manufacturer_id: String,

View File

@@ -74,6 +74,7 @@ impl WifiParsedRXingResult {
) )
} }
#[allow(clippy::too_many_arguments)]
pub fn with_details( pub fn with_details(
networkEncryption: String, networkEncryption: String,
ssid: String, ssid: String,

View File

@@ -209,7 +209,6 @@ impl BitMatrix {
#[inline(always)] #[inline(always)]
fn get_offset(&self, y: u32, x: u32) -> usize { fn get_offset(&self, y: u32, x: u32) -> usize {
y as usize * self.row_size + (x as usize / 32) y as usize * self.row_size + (x as usize / 32)
} }

View File

@@ -143,6 +143,7 @@ impl<'a> MonochromeRectangleDetector<'_> {
* @return a {@link RXingResultPoint} encapsulating the corner that was found * @return a {@link RXingResultPoint} encapsulating the corner that was found
* @throws NotFoundException if such a point cannot be found * @throws NotFoundException if such a point cannot be found
*/ */
#[allow(clippy::too_many_arguments)]
fn findCornerFromCenter( fn findCornerFromCenter(
&self, &self,
centerX: i32, centerX: i32,

View File

@@ -86,6 +86,7 @@ pub trait GridSampler {
* @throws NotFoundException if image can't be sampled, for example, if the transformation defined * @throws NotFoundException if image can't be sampled, for example, if the transformation defined
* by the given points is invalid or results in sampling outside the image boundaries * by the given points is invalid or results in sampling outside the image boundaries
*/ */
#[allow(clippy::too_many_arguments)]
fn sample_grid_detailed( fn sample_grid_detailed(
&self, &self,
image: &BitMatrix, image: &BitMatrix,

View File

@@ -36,6 +36,7 @@ pub struct PerspectiveTransform {
} }
impl PerspectiveTransform { impl PerspectiveTransform {
#[allow(clippy::too_many_arguments)]
fn new( fn new(
a11: f32, a11: f32,
a21: f32, a21: f32,
@@ -60,6 +61,7 @@ impl PerspectiveTransform {
} }
} }
#[allow(clippy::too_many_arguments)]
pub fn quadrilateralToQuadrilateral( pub fn quadrilateralToQuadrilateral(
x0: f32, x0: f32,
y0: f32, y0: f32,
@@ -118,6 +120,7 @@ impl PerspectiveTransform {
} }
} }
#[allow(clippy::too_many_arguments)]
pub fn squareToQuadrilateral( pub fn squareToQuadrilateral(
x0: f32, x0: f32,
y0: f32, y0: f32,
@@ -165,6 +168,7 @@ impl PerspectiveTransform {
} }
} }
#[allow(clippy::too_many_arguments)]
pub fn quadrilateralToSquare( pub fn quadrilateralToSquare(
x0: f32, x0: f32,
y0: f32, y0: f32,

View File

@@ -1,11 +1,11 @@
mod bit_matrix_parser; mod bit_matrix_parser;
mod data_block; mod data_block;
mod decoder; mod datamatrix_decoder;
mod version; mod version;
pub use bit_matrix_parser::*; pub use bit_matrix_parser::*;
pub use data_block::*; pub use data_block::*;
pub use decoder::*; pub use datamatrix_decoder::*;
pub use version::*; pub use version::*;
pub mod decoded_bit_stream_parser; pub mod decoded_bit_stream_parser;

View File

@@ -1,4 +1,4 @@
mod datamatrix_detector;
mod datamatrix_result; mod datamatrix_result;
mod detector; pub use datamatrix_detector::*;
pub use datamatrix_result::*; pub use datamatrix_result::*;
pub use detector::*;

View File

@@ -1,5 +1,5 @@
mod datamatrix_encoder;
mod default_placement; mod default_placement;
mod encoder;
mod encoder_context; mod encoder_context;
pub mod error_correction; pub mod error_correction;
pub mod high_level_encoder; pub mod high_level_encoder;
@@ -7,8 +7,8 @@ pub mod minimal_encoder;
mod symbol_info; mod symbol_info;
mod symbol_shape_hint; mod symbol_shape_hint;
pub use datamatrix_encoder::*;
pub use default_placement::*; pub use default_placement::*;
pub use encoder::*;
pub use encoder_context::*; pub use encoder_context::*;
pub use symbol_info::*; pub use symbol_info::*;
pub use symbol_shape_hint::*; pub use symbol_shape_hint::*;

View File

@@ -93,6 +93,7 @@ impl SymbolInfo {
) )
} }
#[allow(clippy::too_many_arguments)]
pub fn with_details( pub fn with_details(
rectangular: bool, rectangular: bool,
dataCapacity: u32, dataCapacity: u32,

View File

@@ -1,6 +1,6 @@
mod bit_matrix_parser; mod bit_matrix_parser;
pub mod decoded_bit_stream_parser; pub mod decoded_bit_stream_parser;
pub mod decoder; pub mod maxicode_decoder;
pub use bit_matrix_parser::*; pub use bit_matrix_parser::*;
pub use decoder::*; pub use maxicode_decoder::*;

View File

@@ -20,7 +20,7 @@ use crate::{
common::BitMatrix, BarcodeFormat, Exceptions, RXingResult, RXingResultMetadataType, Reader, common::BitMatrix, BarcodeFormat, Exceptions, RXingResult, RXingResultMetadataType, Reader,
}; };
use super::decoder::decoder; use super::decoder::maxicode_decoder;
/** /**
* This implementation can detect and decode a MaxiCode in an image. * This implementation can detect and decode a MaxiCode in an image.
@@ -62,7 +62,7 @@ impl Reader for MaxiCodeReader {
// Note that MaxiCode reader effectively always assumes PURE_BARCODE mode // Note that MaxiCode reader effectively always assumes PURE_BARCODE mode
// and can't detect it in an image // and can't detect it in an image
let bits = Self::extractPureBits(image.getBlackMatrix())?; let bits = Self::extractPureBits(image.getBlackMatrix())?;
let decoderRXingResult = decoder::decode_with_hints(bits, hints)?; let decoderRXingResult = maxicode_decoder::decode_with_hints(bits, hints)?;
let mut result = RXingResult::new( let mut result = RXingResult::new(
decoderRXingResult.getText(), decoderRXingResult.getText(),
decoderRXingResult.getRawBytes().clone(), decoderRXingResult.getRawBytes().clone(),

View File

@@ -53,7 +53,7 @@ impl MultipleBarcodeReader for QRCodeMultiReader {
let detectorRXingResults = MultiDetector::new(image.getBlackMatrix()).detectMulti(hints)?; let detectorRXingResults = MultiDetector::new(image.getBlackMatrix()).detectMulti(hints)?;
for detectorRXingResult in detectorRXingResults { for detectorRXingResult in detectorRXingResults {
let mut proc = || -> Result<(), Exceptions> { let mut proc = || -> Result<(), Exceptions> {
let decoderRXingResult = decoder::decoder::decode_bitmatrix_with_hints( let decoderRXingResult = decoder::qrcode_decoder::decode_bitmatrix_with_hints(
detectorRXingResult.getBits(), detectorRXingResult.getBits(),
hints, hints,
)?; )?;

View File

@@ -50,12 +50,14 @@ impl BarcodeValue {
let mut result = Vec::new(); let mut result = Vec::new();
for (key, value) in &self.0 { for (key, value) in &self.0 {
// for (Entry<Integer,Integer> entry : values.entrySet()) { // for (Entry<Integer,Integer> entry : values.entrySet()) {
if *value as i32 > maxConfidence { match (*value as i32).cmp(&maxConfidence) {
std::cmp::Ordering::Greater => {
maxConfidence = *value as i32; maxConfidence = *value as i32;
result.clear(); result.clear();
result.push(*key); result.push(*key);
} else if *value as i32 == maxConfidence { }
result.push(*key); std::cmp::Ordering::Equal => result.push(*key),
std::cmp::Ordering::Less => {}
} }
} }

View File

@@ -648,6 +648,7 @@ fn getStartColumn(
} }
} }
#[allow(clippy::too_many_arguments)]
fn detectCodeword( fn detectCodeword(
image: &BitMatrix, image: &BitMatrix,
minColumn: u32, minColumn: u32,

View File

@@ -1,4 +1,4 @@
mod pdf_417_detector_result; mod pdf_417_detector_result;
pub use pdf_417_detector_result::*; pub use pdf_417_detector_result::*;
pub mod detector; pub mod pdf_417_detector;

View File

@@ -23,7 +23,7 @@ use crate::{
}; };
use super::{ use super::{
decoder::pdf_417_scanning_decoder, detector::detector, pdf_417_common, decoder::pdf_417_scanning_decoder, detector::pdf_417_detector, pdf_417_common,
PDF417RXingResultMetadata, PDF417RXingResultMetadata,
}; };
@@ -95,7 +95,7 @@ impl PDF417Reader {
multiple: bool, multiple: bool,
) -> Result<Vec<RXingResult>, Exceptions> { ) -> Result<Vec<RXingResult>, Exceptions> {
let mut results = Vec::new(); //new ArrayList<>(); let mut results = Vec::new(); //new ArrayList<>();
let detectorRXingResult = detector::detect_with_hints(image, hints, multiple)?; let detectorRXingResult = pdf_417_detector::detect_with_hints(image, hints, multiple)?;
for points in detectorRXingResult.getPoints() { for points in detectorRXingResult.getPoints() {
let points_filtered = points.iter().filter_map(|e| *e).collect(); let points_filtered = points.iter().filter_map(|e| *e).collect();
// for (RXingResultPoint[] points : detectorRXingResult.getPoints()) { // for (RXingResultPoint[] points : detectorRXingResult.getPoints()) {

View File

@@ -153,6 +153,7 @@ pub struct PlanarYUVLuminanceSource {
} }
impl PlanarYUVLuminanceSource { impl PlanarYUVLuminanceSource {
#[allow(clippy::too_many_arguments)]
pub fn new_with_all( pub fn new_with_all(
yuv_data: Vec<u8>, yuv_data: Vec<u8>,
data_width: usize, data_width: usize,

View File

@@ -2,11 +2,11 @@ mod bit_matrix_parser;
mod data_block; mod data_block;
mod data_mask; mod data_mask;
pub mod decoded_bit_stream_parser; pub mod decoded_bit_stream_parser;
pub mod decoder;
mod error_correction_level; mod error_correction_level;
mod format_information; mod format_information;
mod mode; mod mode;
mod qr_code_decoder_meta_data; mod qr_code_decoder_meta_data;
pub mod qrcode_decoder;
mod version; mod version;
#[cfg(test)] #[cfg(test)]

View File

@@ -3,7 +3,8 @@ use std::collections::HashMap;
use crate::{ use crate::{
common::{BitMatrix, DetectorRXingResult}, common::{BitMatrix, DetectorRXingResult},
qrcode::{ qrcode::{
decoder::decoder, decoder::ErrorCorrectionLevel, detector::Detector, encoder::encoder, decoder::qrcode_decoder, decoder::ErrorCorrectionLevel, detector::Detector,
encoder::qrcode_encoder,
}, },
}; };
@@ -26,8 +27,8 @@ fn test_encode_decode(value: &str) {
for ec_level_v in 0..4 { for ec_level_v in 0..4 {
let ec_level: ErrorCorrectionLevel = let ec_level: ErrorCorrectionLevel =
ErrorCorrectionLevel::forBits(ec_level_v).expect("must get level"); ErrorCorrectionLevel::forBits(ec_level_v).expect("must get level");
let qr_code = let qr_code = qrcode_encoder::encode_with_hints(value, ec_level, &HashMap::new())
encoder::encode_with_hints(value, ec_level, &HashMap::new()).expect("must encode"); .expect("must encode");
// dbg!(&qr_code.to_string()); // dbg!(&qr_code.to_string());
let byt_matrix = qr_code.getMatrix().as_ref().unwrap().clone(); let byt_matrix = qr_code.getMatrix().as_ref().unwrap().clone();
// dbg!(BitMatrix::from(byt_matrix.clone()).to_string()); // dbg!(BitMatrix::from(byt_matrix.clone()).to_string());
@@ -35,7 +36,8 @@ fn test_encode_decode(value: &str) {
let new_matrix: &BitMatrix = &byt_matrix.into(); let new_matrix: &BitMatrix = &byt_matrix.into();
let mut detector = Detector::new(new_matrix); let mut detector = Detector::new(new_matrix);
let detected_points = detector.detect().expect("must detect"); let detected_points = detector.detect().expect("must detect");
let decoded = decoder::decode_bitmatrix(detected_points.getBits()).expect("must decode"); let decoded =
qrcode_decoder::decode_bitmatrix(detected_points.getBits()).expect("must decode");
assert_eq!(decoded.getText(), value); assert_eq!(decoded.getText(), value);
} }
} }

View File

@@ -1,17 +1,17 @@
mod alignment_pattern; mod alignment_pattern;
mod alignment_pattern_finder; mod alignment_pattern_finder;
mod detector;
mod finder_pattern; mod finder_pattern;
mod finder_pattern_finder; mod finder_pattern_finder;
mod finder_pattern_info; mod finder_pattern_info;
mod qrcode_detector;
mod qrcode_detector_result; mod qrcode_detector_result;
pub use alignment_pattern::*; pub use alignment_pattern::*;
pub use alignment_pattern_finder::*; pub use alignment_pattern_finder::*;
pub use detector::*;
pub use finder_pattern::*; pub use finder_pattern::*;
pub use finder_pattern_finder::*; pub use finder_pattern_finder::*;
pub use finder_pattern_info::*; pub use finder_pattern_info::*;
pub use qrcode_detector::*;
pub use qrcode_detector_result::*; pub use qrcode_detector_result::*;
#[cfg(test)] #[cfg(test)]

View File

@@ -20,7 +20,7 @@ use crate::{
common::BitArray, common::BitArray,
qrcode::{ qrcode::{
decoder::{ErrorCorrectionLevel, Mode, Version}, decoder::{ErrorCorrectionLevel, Mode, Version},
encoder::{encoder, MinimalEncoder}, encoder::{qrcode_encoder, MinimalEncoder},
}, },
EncodeHintType, EncodeHintValue, EncodeHintType, EncodeHintValue,
}; };
@@ -42,7 +42,10 @@ fn testGetAlphanumericCode() {
// The first ten code points are numbers. // The first ten code points are numbers.
for i in 0..10u8 { for i in 0..10u8 {
// for (int i = 0; i < 10; ++i) { // for (int i = 0; i < 10; ++i) {
assert_eq!(i as i8, encoder::getAlphanumericCode((b'0' + i) as u32)); assert_eq!(
i as i8,
qrcode_encoder::getAlphanumericCode((b'0' + i) as u32)
);
} }
// The next 26 code points are capital alphabet letters. // The next 26 code points are capital alphabet letters.
@@ -50,32 +53,32 @@ fn testGetAlphanumericCode() {
// for (int i = 10; i < 36; ++i) { // for (int i = 10; i < 36; ++i) {
assert_eq!( assert_eq!(
i as i8, i as i8,
encoder::getAlphanumericCode((b'A' + i - 10) as u32) qrcode_encoder::getAlphanumericCode((b'A' + i - 10) as u32)
); );
} }
// Others are symbol letters // Others are symbol letters
assert_eq!(36, encoder::getAlphanumericCode(b' ' as u32)); assert_eq!(36, qrcode_encoder::getAlphanumericCode(b' ' as u32));
assert_eq!(37, encoder::getAlphanumericCode(b'$' as u32)); assert_eq!(37, qrcode_encoder::getAlphanumericCode(b'$' as u32));
assert_eq!(38, encoder::getAlphanumericCode(b'%' as u32)); assert_eq!(38, qrcode_encoder::getAlphanumericCode(b'%' as u32));
assert_eq!(39, encoder::getAlphanumericCode(b'*' as u32)); assert_eq!(39, qrcode_encoder::getAlphanumericCode(b'*' as u32));
assert_eq!(40, encoder::getAlphanumericCode(b'+' as u32)); assert_eq!(40, qrcode_encoder::getAlphanumericCode(b'+' as u32));
assert_eq!(41, encoder::getAlphanumericCode(b'-' as u32)); assert_eq!(41, qrcode_encoder::getAlphanumericCode(b'-' as u32));
assert_eq!(42, encoder::getAlphanumericCode(b'.' as u32)); assert_eq!(42, qrcode_encoder::getAlphanumericCode(b'.' as u32));
assert_eq!(43, encoder::getAlphanumericCode(b'/' as u32)); assert_eq!(43, qrcode_encoder::getAlphanumericCode(b'/' as u32));
assert_eq!(44, encoder::getAlphanumericCode(b':' as u32)); assert_eq!(44, qrcode_encoder::getAlphanumericCode(b':' as u32));
// Should return -1 for other letters; // Should return -1 for other letters;
assert_eq!(-1, encoder::getAlphanumericCode(b'a' as u32)); assert_eq!(-1, qrcode_encoder::getAlphanumericCode(b'a' as u32));
assert_eq!(-1, encoder::getAlphanumericCode(b'#' as u32)); assert_eq!(-1, qrcode_encoder::getAlphanumericCode(b'#' as u32));
assert_eq!(-1, encoder::getAlphanumericCode(b'\0' as u32)); assert_eq!(-1, qrcode_encoder::getAlphanumericCode(b'\0' as u32));
} }
#[test] #[test]
fn test_digits_only() { fn test_digits_only() {
let test_data = "374833744734397449"; let test_data = "374833744734397449";
let data = encoder::encode(test_data, ErrorCorrectionLevel::H).expect("encode"); let data = qrcode_encoder::encode(test_data, ErrorCorrectionLevel::H).expect("encode");
let decode = crate::qrcode::decoder::decoder::decode_bitmatrix( let decode = crate::qrcode::decoder::qrcode_decoder::decode_bitmatrix(
&data.getMatrix().as_ref().unwrap().clone().into(), &data.getMatrix().as_ref().unwrap().clone().into(),
) )
.expect("decode"); .expect("decode");
@@ -85,18 +88,18 @@ fn test_digits_only() {
#[test] #[test]
fn testChooseMode() { fn testChooseMode() {
// Numeric Mode:: // Numeric Mode::
assert_eq!(Mode::NUMERIC, encoder::chooseMode("0")); assert_eq!(Mode::NUMERIC, qrcode_encoder::chooseMode("0"));
assert_eq!(Mode::NUMERIC, encoder::chooseMode("0123456789")); assert_eq!(Mode::NUMERIC, qrcode_encoder::chooseMode("0123456789"));
// Alphanumeric Mode:: // Alphanumeric Mode::
assert_eq!(Mode::ALPHANUMERIC, encoder::chooseMode("A")); assert_eq!(Mode::ALPHANUMERIC, qrcode_encoder::chooseMode("A"));
assert_eq!( assert_eq!(
Mode::ALPHANUMERIC, Mode::ALPHANUMERIC,
encoder::chooseMode("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:") qrcode_encoder::chooseMode("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:")
); );
// 8-bit byte Mode:: // 8-bit byte Mode::
assert_eq!(Mode::BYTE, encoder::chooseMode("a")); assert_eq!(Mode::BYTE, qrcode_encoder::chooseMode("a"));
assert_eq!(Mode::BYTE, encoder::chooseMode("#")); assert_eq!(Mode::BYTE, qrcode_encoder::chooseMode("#"));
assert_eq!(Mode::BYTE, encoder::chooseMode("")); assert_eq!(Mode::BYTE, qrcode_encoder::chooseMode(""));
// Kanji Mode:: We used to use MODE_KANJI for these, but we stopped // Kanji Mode:: We used to use MODE_KANJI for these, but we stopped
// doing that as we cannot distinguish Shift_JIS from other encodings // doing that as we cannot distinguish Shift_JIS from other encodings
// from data bytes alone. See also comments in qrcode_encoder::h. // from data bytes alone. See also comments in qrcode_encoder::h.
@@ -104,25 +107,25 @@ fn testChooseMode() {
// AIUE in Hiragana in Shift_JIS // AIUE in Hiragana in Shift_JIS
assert_eq!( assert_eq!(
Mode::BYTE, Mode::BYTE,
encoder::chooseMode(&shiftJISString(&[0x8, 0xa, 0x8, 0xa, 0x8, 0xa, 0x8, 0xa6])) qrcode_encoder::chooseMode(&shiftJISString(&[0x8, 0xa, 0x8, 0xa, 0x8, 0xa, 0x8, 0xa6]))
); );
// Nihon in Kanji in Shift_JIS. // Nihon in Kanji in Shift_JIS.
assert_eq!( assert_eq!(
Mode::BYTE, Mode::BYTE,
encoder::chooseMode(&shiftJISString(&[0x9, 0xf, 0x9, 0x7b])) qrcode_encoder::chooseMode(&shiftJISString(&[0x9, 0xf, 0x9, 0x7b]))
); );
// Sou-Utsu-Byou in Kanji in Shift_JIS. // Sou-Utsu-Byou in Kanji in Shift_JIS.
assert_eq!( assert_eq!(
Mode::BYTE, Mode::BYTE,
encoder::chooseMode(&shiftJISString(&[0xe, 0x4, 0x9, 0x5, 0x9, 0x61])) qrcode_encoder::chooseMode(&shiftJISString(&[0xe, 0x4, 0x9, 0x5, 0x9, 0x61]))
); );
} }
#[test] #[test]
fn testEncode() { fn testEncode() {
let qrCode = encoder::encode("ABCDEF", ErrorCorrectionLevel::H).expect("encode"); let qrCode = qrcode_encoder::encode("ABCDEF", ErrorCorrectionLevel::H).expect("encode");
let expected = r"<< let expected = r"<<
mode: ALPHANUMERIC mode: ALPHANUMERIC
ecLevel: H ecLevel: H
@@ -162,8 +165,8 @@ fn testEncodeWithVersion() {
EncodeHintType::QR_VERSION, EncodeHintType::QR_VERSION,
EncodeHintValue::QrVersion("7".to_owned()), EncodeHintValue::QrVersion("7".to_owned()),
); );
let qrCode = let qrCode = qrcode_encoder::encode_with_hints("ABCDEF", ErrorCorrectionLevel::H, &hints)
encoder::encode_with_hints("ABCDEF", ErrorCorrectionLevel::H, &hints).expect("encode"); .expect("encode");
assert!(qrCode.to_string().contains(" version: 7\n")); assert!(qrCode.to_string().contains(" version: 7\n"));
} }
@@ -175,7 +178,7 @@ fn testEncodeWithVersionTooSmall() {
EncodeHintType::QR_VERSION, EncodeHintType::QR_VERSION,
EncodeHintValue::QrVersion("3".to_owned()), EncodeHintValue::QrVersion("3".to_owned()),
); );
encoder::encode_with_hints( qrcode_encoder::encode_with_hints(
"THISMESSAGEISTOOLONGFORAQRCODEVERSION3", "THISMESSAGEISTOOLONGFORAQRCODEVERSION3",
ErrorCorrectionLevel::H, ErrorCorrectionLevel::H,
&hints, &hints,
@@ -190,8 +193,8 @@ fn testSimpleutf8ECI() {
EncodeHintType::CHARACTER_SET, EncodeHintType::CHARACTER_SET,
EncodeHintValue::CharacterSet("utf8".to_owned()), EncodeHintValue::CharacterSet("utf8".to_owned()),
); );
let qrCode = let qrCode = qrcode_encoder::encode_with_hints("hello", ErrorCorrectionLevel::H, &hints)
encoder::encode_with_hints("hello", ErrorCorrectionLevel::H, &hints).expect("encode"); .expect("encode");
let expected = r"<< let expected = r"<<
mode: BYTE mode: BYTE
ecLevel: H ecLevel: H
@@ -233,7 +236,8 @@ fn testEncodeKanjiMode() {
EncodeHintValue::CharacterSet("Shift_JIS".to_owned()), EncodeHintValue::CharacterSet("Shift_JIS".to_owned()),
); );
// Nihon in Kanji // Nihon in Kanji
let qrCode = encoder::encode_with_hints("\u{65e5}\u{672c}", ErrorCorrectionLevel::M, &hints) let qrCode =
qrcode_encoder::encode_with_hints("\u{65e5}\u{672c}", ErrorCorrectionLevel::M, &hints)
.expect("encode"); .expect("encode");
let expected = r"<< let expected = r"<<
mode: KANJI mode: KANJI
@@ -277,7 +281,7 @@ fn testEncodeShiftjisNumeric() {
); );
let qrCode = let qrCode =
encoder::encode_with_hints("0123", ErrorCorrectionLevel::M, &hints).expect("encode"); qrcode_encoder::encode_with_hints("0123", ErrorCorrectionLevel::M, &hints).expect("encode");
let expected = r"<< let expected = r"<<
mode: NUMERIC mode: NUMERIC
ecLevel: M ecLevel: M
@@ -315,7 +319,8 @@ fn testEncodeGS1WithStringTypeHint() {
let mut hints = HashMap::new(); let mut hints = HashMap::new();
hints.insert(EncodeHintType::GS1_FORMAT, EncodeHintValue::Gs1Format(true)); hints.insert(EncodeHintType::GS1_FORMAT, EncodeHintValue::Gs1Format(true));
let qrCode = encoder::encode_with_hints("100001%11171218", ErrorCorrectionLevel::H, &hints) let qrCode =
qrcode_encoder::encode_with_hints("100001%11171218", ErrorCorrectionLevel::H, &hints)
.expect("encode"); .expect("encode");
verifyGS1EncodedData(&qrCode); verifyGS1EncodedData(&qrCode);
} }
@@ -325,7 +330,8 @@ fn testEncodeGS1WithBooleanTypeHint() {
let mut hints = HashMap::new(); let mut hints = HashMap::new();
hints.insert(EncodeHintType::GS1_FORMAT, EncodeHintValue::Gs1Format(true)); hints.insert(EncodeHintType::GS1_FORMAT, EncodeHintValue::Gs1Format(true));
let qrCode = encoder::encode_with_hints("100001%11171218", ErrorCorrectionLevel::H, &hints) let qrCode =
qrcode_encoder::encode_with_hints("100001%11171218", ErrorCorrectionLevel::H, &hints)
.expect("encode"); .expect("encode");
verifyGS1EncodedData(&qrCode); verifyGS1EncodedData(&qrCode);
} }
@@ -339,8 +345,8 @@ fn testDoesNotEncodeGS1WhenBooleanTypeHintExplicitlyFalse() {
EncodeHintValue::Gs1Format(false), EncodeHintValue::Gs1Format(false),
); );
let qrCode = let qrCode = qrcode_encoder::encode_with_hints("ABCDEF", ErrorCorrectionLevel::H, &hints)
encoder::encode_with_hints("ABCDEF", ErrorCorrectionLevel::H, &hints).expect("encode"); .expect("encode");
verifyNotGS1EncodedData(&qrCode); verifyNotGS1EncodedData(&qrCode);
} }
@@ -352,8 +358,8 @@ fn testDoesNotEncodeGS1WhenStringTypeHintExplicitlyFalse() {
EncodeHintType::GS1_FORMAT, EncodeHintType::GS1_FORMAT,
EncodeHintValue::Gs1Format(false), EncodeHintValue::Gs1Format(false),
); );
let qrCode = let qrCode = qrcode_encoder::encode_with_hints("ABCDEF", ErrorCorrectionLevel::H, &hints)
encoder::encode_with_hints("ABCDEF", ErrorCorrectionLevel::H, &hints).expect("encode"); .expect("encode");
verifyNotGS1EncodedData(&qrCode); verifyNotGS1EncodedData(&qrCode);
} }
@@ -366,8 +372,8 @@ fn testGS1ModeHeaderWithECI() {
EncodeHintValue::CharacterSet("utf8".to_owned()), EncodeHintValue::CharacterSet("utf8".to_owned()),
); );
hints.insert(EncodeHintType::GS1_FORMAT, EncodeHintValue::Gs1Format(true)); hints.insert(EncodeHintType::GS1_FORMAT, EncodeHintValue::Gs1Format(true));
let qrCode = let qrCode = qrcode_encoder::encode_with_hints("hello", ErrorCorrectionLevel::H, &hints)
encoder::encode_with_hints("hello", ErrorCorrectionLevel::H, &hints).expect("encode"); .expect("encode");
let expected = r"<< let expected = r"<<
mode: BYTE mode: BYTE
ecLevel: H ecLevel: H
@@ -403,14 +409,14 @@ fn testGS1ModeHeaderWithECI() {
#[test] #[test]
fn testAppendModeInfo() { fn testAppendModeInfo() {
let mut bits = BitArray::new(); let mut bits = BitArray::new();
assert!(encoder::appendModeInfo(Mode::NUMERIC, &mut bits).is_ok()); assert!(qrcode_encoder::appendModeInfo(Mode::NUMERIC, &mut bits).is_ok());
assert_eq!(" ...X", bits.to_string()); assert_eq!(" ...X", bits.to_string());
} }
#[test] #[test]
fn testAppendLengthInfo() { fn testAppendLengthInfo() {
let mut bits = BitArray::new(); let mut bits = BitArray::new();
encoder::appendLengthInfo( qrcode_encoder::appendLengthInfo(
1, // 1 letter (1/1). 1, // 1 letter (1/1).
Version::getVersionForNumber(1).unwrap(), Version::getVersionForNumber(1).unwrap(),
Mode::NUMERIC, Mode::NUMERIC,
@@ -419,7 +425,7 @@ fn testAppendLengthInfo() {
.expect("ok"); .expect("ok");
assert_eq!(" ........ .X", bits.to_string()); // 10 bits. assert_eq!(" ........ .X", bits.to_string()); // 10 bits.
let mut bits = BitArray::new(); let mut bits = BitArray::new();
encoder::appendLengthInfo( qrcode_encoder::appendLengthInfo(
2, // 2 letters (2/1). 2, // 2 letters (2/1).
Version::getVersionForNumber(10).unwrap(), Version::getVersionForNumber(10).unwrap(),
Mode::ALPHANUMERIC, Mode::ALPHANUMERIC,
@@ -428,7 +434,7 @@ fn testAppendLengthInfo() {
.expect("ok"); .expect("ok");
assert_eq!(" ........ .X.", bits.to_string()); // 11 bits. assert_eq!(" ........ .X.", bits.to_string()); // 11 bits.
let mut bits = BitArray::new(); let mut bits = BitArray::new();
encoder::appendLengthInfo( qrcode_encoder::appendLengthInfo(
255, // 255 letter (255/1). 255, // 255 letter (255/1).
Version::getVersionForNumber(27).unwrap(), Version::getVersionForNumber(27).unwrap(),
Mode::BYTE, Mode::BYTE,
@@ -437,7 +443,7 @@ fn testAppendLengthInfo() {
.expect("ok"); .expect("ok");
assert_eq!(" ........ XXXXXXXX", bits.to_string()); // 16 bits. assert_eq!(" ........ XXXXXXXX", bits.to_string()); // 16 bits.
let mut bits = BitArray::new(); let mut bits = BitArray::new();
encoder::appendLengthInfo( qrcode_encoder::appendLengthInfo(
512, // 512 letters (1024/2). 512, // 512 letters (1024/2).
Version::getVersionForNumber(40).unwrap(), Version::getVersionForNumber(40).unwrap(),
Mode::KANJI, Mode::KANJI,
@@ -452,32 +458,32 @@ fn testAppendBytes() {
// Should use appendNumericBytes. // Should use appendNumericBytes.
// 1 = 01 = 0001 in 4 bits. // 1 = 01 = 0001 in 4 bits.
let mut bits = BitArray::new(); let mut bits = BitArray::new();
encoder::appendBytes( qrcode_encoder::appendBytes(
"1", "1",
Mode::NUMERIC, Mode::NUMERIC,
&mut bits, &mut bits,
encoder::DEFAULT_BYTE_MODE_ENCODING, qrcode_encoder::DEFAULT_BYTE_MODE_ENCODING,
) )
.expect("ok"); .expect("ok");
assert_eq!(" ...X", bits.to_string()); assert_eq!(" ...X", bits.to_string());
// Should use appendAlphanumericBytes. // Should use appendAlphanumericBytes.
// A = 10 = 0xa = 001010 in 6 bits // A = 10 = 0xa = 001010 in 6 bits
let mut bits = BitArray::new(); let mut bits = BitArray::new();
encoder::appendBytes( qrcode_encoder::appendBytes(
"A", "A",
Mode::ALPHANUMERIC, Mode::ALPHANUMERIC,
&mut bits, &mut bits,
encoder::DEFAULT_BYTE_MODE_ENCODING, qrcode_encoder::DEFAULT_BYTE_MODE_ENCODING,
) )
.expect("ok"); .expect("ok");
assert_eq!(" ..X.X.", bits.to_string()); assert_eq!(" ..X.X.", bits.to_string());
// Lower letters such as 'a' cannot be encoded in MODE_ALPHANUMERIC. // Lower letters such as 'a' cannot be encoded in MODE_ALPHANUMERIC.
//try { //try {
if encoder::appendBytes( if qrcode_encoder::appendBytes(
"a", "a",
Mode::ALPHANUMERIC, Mode::ALPHANUMERIC,
&mut bits, &mut bits,
encoder::DEFAULT_BYTE_MODE_ENCODING, qrcode_encoder::DEFAULT_BYTE_MODE_ENCODING,
) )
.is_ok() .is_ok()
{ {
@@ -489,30 +495,30 @@ fn testAppendBytes() {
// Should use append8BitBytes. // Should use append8BitBytes.
// 0x61, 0x62, 0x63 // 0x61, 0x62, 0x63
let mut bits = BitArray::new(); let mut bits = BitArray::new();
encoder::appendBytes( qrcode_encoder::appendBytes(
"abc", "abc",
Mode::BYTE, Mode::BYTE,
&mut bits, &mut bits,
encoder::DEFAULT_BYTE_MODE_ENCODING, qrcode_encoder::DEFAULT_BYTE_MODE_ENCODING,
) )
.expect("ok"); .expect("ok");
assert_eq!(" .XX....X .XX...X. .XX...XX", bits.to_string()); assert_eq!(" .XX....X .XX...X. .XX...XX", bits.to_string());
// Anything can be encoded in QRCode.MODE_8BIT_BYTE. // Anything can be encoded in QRCode.MODE_8BIT_BYTE.
encoder::appendBytes( qrcode_encoder::appendBytes(
"\0", "\0",
Mode::BYTE, Mode::BYTE,
&mut bits, &mut bits,
encoder::DEFAULT_BYTE_MODE_ENCODING, qrcode_encoder::DEFAULT_BYTE_MODE_ENCODING,
) )
.expect("ok"); .expect("ok");
// Should use appendKanjiBytes. // Should use appendKanjiBytes.
// 0x93, 0x5f // 0x93, 0x5f
let mut bits = BitArray::new(); let mut bits = BitArray::new();
encoder::appendBytes( qrcode_encoder::appendBytes(
&shiftJISString(&[0x93, 0x5f]), &shiftJISString(&[0x93, 0x5f]),
Mode::KANJI, Mode::KANJI,
&mut bits, &mut bits,
encoder::DEFAULT_BYTE_MODE_ENCODING, qrcode_encoder::DEFAULT_BYTE_MODE_ENCODING,
) )
.expect("ok"); .expect("ok");
assert_eq!(" .XX.XX.. XXXXX", bits.to_string()); assert_eq!(" .XX.XX.. XXXXX", bits.to_string());
@@ -521,29 +527,29 @@ fn testAppendBytes() {
#[test] #[test]
fn testTerminateBits() { fn testTerminateBits() {
let mut v = BitArray::new(); let mut v = BitArray::new();
encoder::terminateBits(0, &mut v).expect("terminate"); qrcode_encoder::terminateBits(0, &mut v).expect("terminate");
assert_eq!("", v.to_string()); assert_eq!("", v.to_string());
let mut v = BitArray::new(); let mut v = BitArray::new();
encoder::terminateBits(1, &mut v).expect("terminate"); qrcode_encoder::terminateBits(1, &mut v).expect("terminate");
assert_eq!(" ........", v.to_string()); assert_eq!(" ........", v.to_string());
let mut v = BitArray::new(); let mut v = BitArray::new();
v.appendBits(0, 3).expect("terminate"); // Append 000 v.appendBits(0, 3).expect("terminate"); // Append 000
encoder::terminateBits(1, &mut v).expect("terminate"); qrcode_encoder::terminateBits(1, &mut v).expect("terminate");
assert_eq!(" ........", v.to_string()); assert_eq!(" ........", v.to_string());
let mut v = BitArray::new(); let mut v = BitArray::new();
v.appendBits(0, 5).expect("terminate"); // Append 00000 v.appendBits(0, 5).expect("terminate"); // Append 00000
encoder::terminateBits(1, &mut v).expect("terminate"); qrcode_encoder::terminateBits(1, &mut v).expect("terminate");
assert_eq!(" ........", v.to_string()); assert_eq!(" ........", v.to_string());
let mut v = BitArray::new(); let mut v = BitArray::new();
v.appendBits(0, 8).expect("terminate"); // Append 00000000 v.appendBits(0, 8).expect("terminate"); // Append 00000000
encoder::terminateBits(1, &mut v).expect("terminate"); qrcode_encoder::terminateBits(1, &mut v).expect("terminate");
assert_eq!(" ........", v.to_string()); assert_eq!(" ........", v.to_string());
let mut v = BitArray::new(); let mut v = BitArray::new();
encoder::terminateBits(2, &mut v).expect("terminate"); qrcode_encoder::terminateBits(2, &mut v).expect("terminate");
assert_eq!(" ........ XXX.XX..", v.to_string()); assert_eq!(" ........ XXX.XX..", v.to_string());
let mut v = BitArray::new(); let mut v = BitArray::new();
v.appendBits(0, 1).expect("terminate"); // Append 0 v.appendBits(0, 1).expect("terminate"); // Append 0
encoder::terminateBits(3, &mut v).expect("terminate"); qrcode_encoder::terminateBits(3, &mut v).expect("terminate");
assert_eq!(" ........ XXX.XX.. ...X...X", v.to_string()); assert_eq!(" ........ XXX.XX.. ...X...X", v.to_string());
} }
@@ -551,43 +557,43 @@ fn testTerminateBits() {
fn testGetNumDataBytesAndNumECBytesForBlockID() { fn testGetNumDataBytesAndNumECBytesForBlockID() {
// Version 1-H. // Version 1-H.
let (numDataBytes, numEcBytes) = let (numDataBytes, numEcBytes) =
encoder::getNumDataBytesAndNumECBytesForBlockID(26, 9, 1, 0).expect("ok"); qrcode_encoder::getNumDataBytesAndNumECBytesForBlockID(26, 9, 1, 0).expect("ok");
assert_eq!(9, numDataBytes); assert_eq!(9, numDataBytes);
assert_eq!(17, numEcBytes); assert_eq!(17, numEcBytes);
// Version 3-H. 2 blocks. // Version 3-H. 2 blocks.
let (numDataBytes, numEcBytes) = let (numDataBytes, numEcBytes) =
encoder::getNumDataBytesAndNumECBytesForBlockID(70, 26, 2, 0).expect("ok"); qrcode_encoder::getNumDataBytesAndNumECBytesForBlockID(70, 26, 2, 0).expect("ok");
assert_eq!(13, numDataBytes); assert_eq!(13, numDataBytes);
assert_eq!(22, numEcBytes); assert_eq!(22, numEcBytes);
let (numDataBytes, numEcBytes) = let (numDataBytes, numEcBytes) =
encoder::getNumDataBytesAndNumECBytesForBlockID(70, 26, 2, 1).expect("ok"); qrcode_encoder::getNumDataBytesAndNumECBytesForBlockID(70, 26, 2, 1).expect("ok");
assert_eq!(13, numDataBytes); assert_eq!(13, numDataBytes);
assert_eq!(22, numEcBytes); assert_eq!(22, numEcBytes);
// Version 7-H. (4 + 1) blocks. // Version 7-H. (4 + 1) blocks.
let (numDataBytes, numEcBytes) = let (numDataBytes, numEcBytes) =
encoder::getNumDataBytesAndNumECBytesForBlockID(196, 66, 5, 0).expect("ok"); qrcode_encoder::getNumDataBytesAndNumECBytesForBlockID(196, 66, 5, 0).expect("ok");
assert_eq!(13, numDataBytes); assert_eq!(13, numDataBytes);
assert_eq!(26, numEcBytes); assert_eq!(26, numEcBytes);
let (numDataBytes, numEcBytes) = let (numDataBytes, numEcBytes) =
encoder::getNumDataBytesAndNumECBytesForBlockID(196, 66, 5, 4).expect("ok"); qrcode_encoder::getNumDataBytesAndNumECBytesForBlockID(196, 66, 5, 4).expect("ok");
assert_eq!(14, numDataBytes); assert_eq!(14, numDataBytes);
assert_eq!(26, numEcBytes); assert_eq!(26, numEcBytes);
// Version 40-H. (20 + 61) blocks. // Version 40-H. (20 + 61) blocks.
let (numDataBytes, numEcBytes) = let (numDataBytes, numEcBytes) =
encoder::getNumDataBytesAndNumECBytesForBlockID(3706, 1276, 81, 0).expect("ok"); qrcode_encoder::getNumDataBytesAndNumECBytesForBlockID(3706, 1276, 81, 0).expect("ok");
assert_eq!(15, numDataBytes); assert_eq!(15, numDataBytes);
assert_eq!(30, numEcBytes); assert_eq!(30, numEcBytes);
let (numDataBytes, numEcBytes) = let (numDataBytes, numEcBytes) =
encoder::getNumDataBytesAndNumECBytesForBlockID(3706, 1276, 81, 20).expect("ok"); qrcode_encoder::getNumDataBytesAndNumECBytesForBlockID(3706, 1276, 81, 20).expect("ok");
assert_eq!(16, numDataBytes); assert_eq!(16, numDataBytes);
assert_eq!(30, numEcBytes); assert_eq!(30, numEcBytes);
let (numDataBytes, numEcBytes) = let (numDataBytes, numEcBytes) =
encoder::getNumDataBytesAndNumECBytesForBlockID(3706, 1276, 81, 80).expect("ok"); qrcode_encoder::getNumDataBytesAndNumECBytesForBlockID(3706, 1276, 81, 80).expect("ok");
assert_eq!(16, numDataBytes); assert_eq!(16, numDataBytes);
assert_eq!(30, numEcBytes); assert_eq!(30, numEcBytes);
} }
@@ -600,7 +606,7 @@ fn testInterleaveWithECBytes() {
// for (byte dataByte: dataBytes) { // for (byte dataByte: dataBytes) {
in_.appendBits(*dataByte, 8).expect("ok"); in_.appendBits(*dataByte, 8).expect("ok");
} }
let out = encoder::interleaveWithECBytes(&in_, 26, 9, 1).expect("encode"); let out = qrcode_encoder::interleaveWithECBytes(&in_, 26, 9, 1).expect("encode");
let expected = &[ let expected = &[
// Data bytes. // Data bytes.
32, 65, 205, 69, 41, 220, 46, 128, 236, // Error correction bytes. 32, 65, 205, 69, 41, 220, 46, 128, 236, // Error correction bytes.
@@ -627,7 +633,7 @@ fn testInterleaveWithECBytes() {
in_.appendBits(*dataByte, 8).expect("ok"); in_.appendBits(*dataByte, 8).expect("ok");
} }
let out = encoder::interleaveWithECBytes(&in_, 134, 62, 4).expect("interleave ok"); let out = qrcode_encoder::interleaveWithECBytes(&in_, 134, 62, 4).expect("interleave ok");
let expected = &[ let expected = &[
// Data bytes. // Data bytes.
67, 230, 54, 55, 70, 247, 70, 71, 22, 7, 86, 87, 38, 23, 102, 103, 54, 39, 118, 119, 70, 55, 67, 230, 54, 55, 70, 247, 70, 71, 22, 7, 86, 87, 38, 23, 102, 103, 54, 39, 118, 119, 70, 55,
@@ -660,23 +666,23 @@ fn testInterleaveWithECBytes() {
fn testAppendNumericBytes() { fn testAppendNumericBytes() {
// 1 = 01 = 0001 in 4 bits. // 1 = 01 = 0001 in 4 bits.
let mut bits = BitArray::new(); let mut bits = BitArray::new();
encoder::appendNumericBytes("1", &mut bits).expect("append"); qrcode_encoder::appendNumericBytes("1", &mut bits).expect("append");
assert_eq!(" ...X", bits.to_string()); assert_eq!(" ...X", bits.to_string());
// 12 = 0xc = 0001100 in 7 bits. // 12 = 0xc = 0001100 in 7 bits.
let mut bits = BitArray::new(); let mut bits = BitArray::new();
encoder::appendNumericBytes("12", &mut bits).expect("append"); qrcode_encoder::appendNumericBytes("12", &mut bits).expect("append");
assert_eq!(" ...XX..", bits.to_string()); assert_eq!(" ...XX..", bits.to_string());
// 123 = 0x7b = 0001111011 in 10 bits. // 123 = 0x7b = 0001111011 in 10 bits.
let mut bits = BitArray::new(); let mut bits = BitArray::new();
encoder::appendNumericBytes("123", &mut bits).expect("append"); qrcode_encoder::appendNumericBytes("123", &mut bits).expect("append");
assert_eq!(" ...XXXX. XX", bits.to_string()); assert_eq!(" ...XXXX. XX", bits.to_string());
// 1234 = "123" + "4" = 0001111011 + 0100 // 1234 = "123" + "4" = 0001111011 + 0100
let mut bits = BitArray::new(); let mut bits = BitArray::new();
encoder::appendNumericBytes("1234", &mut bits).expect("append"); qrcode_encoder::appendNumericBytes("1234", &mut bits).expect("append");
assert_eq!(" ...XXXX. XX.X..", bits.to_string()); assert_eq!(" ...XXXX. XX.X..", bits.to_string());
// Empty. // Empty.
let mut bits = BitArray::new(); let mut bits = BitArray::new();
encoder::appendNumericBytes("", &mut bits).expect("append"); qrcode_encoder::appendNumericBytes("", &mut bits).expect("append");
assert_eq!("", bits.to_string()); assert_eq!("", bits.to_string());
} }
@@ -684,23 +690,23 @@ fn testAppendNumericBytes() {
fn testAppendAlphanumericBytes() { fn testAppendAlphanumericBytes() {
// A = 10 = 0xa = 001010 in 6 bits // A = 10 = 0xa = 001010 in 6 bits
let mut bits = BitArray::new(); let mut bits = BitArray::new();
encoder::appendAlphanumericBytes("A", &mut bits).expect("append"); qrcode_encoder::appendAlphanumericBytes("A", &mut bits).expect("append");
assert_eq!(" ..X.X.", bits.to_string()); assert_eq!(" ..X.X.", bits.to_string());
// AB = 10 * 45 + 11 = 461 = 0x1cd = 00111001101 in 11 bits // AB = 10 * 45 + 11 = 461 = 0x1cd = 00111001101 in 11 bits
let mut bits = BitArray::new(); let mut bits = BitArray::new();
encoder::appendAlphanumericBytes("AB", &mut bits).expect("append"); qrcode_encoder::appendAlphanumericBytes("AB", &mut bits).expect("append");
assert_eq!(" ..XXX..X X.X", bits.to_string()); assert_eq!(" ..XXX..X X.X", bits.to_string());
// ABC = "AB" + "C" = 00111001101 + 001100 // ABC = "AB" + "C" = 00111001101 + 001100
let mut bits = BitArray::new(); let mut bits = BitArray::new();
encoder::appendAlphanumericBytes("ABC", &mut bits).expect("append"); qrcode_encoder::appendAlphanumericBytes("ABC", &mut bits).expect("append");
assert_eq!(" ..XXX..X X.X..XX. .", bits.to_string()); assert_eq!(" ..XXX..X X.X..XX. .", bits.to_string());
// Empty. // Empty.
let mut bits = BitArray::new(); let mut bits = BitArray::new();
encoder::appendAlphanumericBytes("", &mut bits).expect("append"); qrcode_encoder::appendAlphanumericBytes("", &mut bits).expect("append");
assert_eq!("", bits.to_string()); assert_eq!("", bits.to_string());
// Invalid data. // Invalid data.
// try { // try {
if encoder::appendAlphanumericBytes("abc", &mut BitArray::new()).is_ok() { if qrcode_encoder::appendAlphanumericBytes("abc", &mut BitArray::new()).is_ok() {
panic!("should not be ok"); panic!("should not be ok");
} }
// } catch (WriterException we) { // } catch (WriterException we) {
@@ -712,12 +718,13 @@ fn testAppendAlphanumericBytes() {
fn testAppend8BitBytes() { fn testAppend8BitBytes() {
// 0x61, 0x62, 0x63 // 0x61, 0x62, 0x63
let mut bits = BitArray::new(); let mut bits = BitArray::new();
encoder::append8BitBytes("abc", &mut bits, encoder::DEFAULT_BYTE_MODE_ENCODING) qrcode_encoder::append8BitBytes("abc", &mut bits, qrcode_encoder::DEFAULT_BYTE_MODE_ENCODING)
.expect("append"); .expect("append");
assert_eq!(" .XX....X .XX...X. .XX...XX", bits.to_string()); assert_eq!(" .XX....X .XX...X. .XX...XX", bits.to_string());
// Empty. // Empty.
let mut bits = BitArray::new(); let mut bits = BitArray::new();
encoder::append8BitBytes("", &mut bits, encoder::DEFAULT_BYTE_MODE_ENCODING).expect("append"); qrcode_encoder::append8BitBytes("", &mut bits, qrcode_encoder::DEFAULT_BYTE_MODE_ENCODING)
.expect("append");
assert_eq!("", bits.to_string()); assert_eq!("", bits.to_string());
} }
@@ -725,9 +732,9 @@ fn testAppend8BitBytes() {
#[test] #[test]
fn testAppendKanjiBytes() { fn testAppendKanjiBytes() {
let mut bits = BitArray::new(); let mut bits = BitArray::new();
encoder::appendKanjiBytes(&shiftJISString(&[0x93, 0x5f]), &mut bits).expect("append"); qrcode_encoder::appendKanjiBytes(&shiftJISString(&[0x93, 0x5f]), &mut bits).expect("append");
assert_eq!(" .XX.XX.. XXXXX", bits.to_string()); assert_eq!(" .XX.XX.. XXXXX", bits.to_string());
encoder::appendKanjiBytes(&shiftJISString(&[0xe4, 0xaa]), &mut bits).expect("append"); qrcode_encoder::appendKanjiBytes(&shiftJISString(&[0xe4, 0xaa]), &mut bits).expect("append");
assert_eq!(" .XX.XX.. XXXXXXX. X.X.X.X. X.", bits.to_string()); assert_eq!(" .XX.XX.. XXXXXXX. X.X.X.X. X.", bits.to_string());
} }
@@ -736,7 +743,7 @@ fn testAppendKanjiBytes() {
#[test] #[test]
fn testGenerateECBytes() { fn testGenerateECBytes() {
let dataBytes = &[32, 65, 205, 69, 41, 220, 46, 128, 236]; let dataBytes = &[32, 65, 205, 69, 41, 220, 46, 128, 236];
let ecBytes = encoder::generateECBytes(dataBytes, 17); let ecBytes = qrcode_encoder::generateECBytes(dataBytes, 17);
let expected = [ let expected = [
42, 159, 74, 221, 244, 169, 239, 150, 138, 70, 237, 85, 224, 96, 74, 219, 61, 42, 159, 74, 221, 244, 169, 239, 150, 138, 70, 237, 85, 224, 96, 74, 219, 61,
]; ];
@@ -748,7 +755,7 @@ fn testGenerateECBytes() {
let dataBytes = &[ let dataBytes = &[
67, 70, 22, 38, 54, 70, 86, 102, 118, 134, 150, 166, 182, 198, 214, 67, 70, 22, 38, 54, 70, 86, 102, 118, 134, 150, 166, 182, 198, 214,
]; ];
let ecBytes = encoder::generateECBytes(dataBytes, 18); let ecBytes = qrcode_encoder::generateECBytes(dataBytes, 18);
let expected = &[ let expected = &[
175, 80, 155, 64, 178, 45, 214, 233, 65, 209, 12, 155, 117, 31, 140, 214, 27, 187, 175, 80, 155, 64, 178, 45, 214, 233, 65, 209, 12, 155, 117, 31, 140, 214, 27, 187,
]; ];
@@ -759,7 +766,7 @@ fn testGenerateECBytes() {
} }
// High-order zero coefficient case. // High-order zero coefficient case.
let dataBytes = &[32, 49, 205, 69, 42, 20, 0, 236, 17]; let dataBytes = &[32, 49, 205, 69, 42, 20, 0, 236, 17];
let ecBytes = encoder::generateECBytes(dataBytes, 17); let ecBytes = qrcode_encoder::generateECBytes(dataBytes, 17);
let expected = &[ let expected = &[
0, 3, 130, 179, 194, 0, 55, 211, 110, 79, 98, 72, 170, 96, 211, 137, 213, 0, 3, 130, 179, 194, 0, 55, 211, 110, 79, 98, 72, 170, 96, 211, 137, 213,
]; ];
@@ -805,7 +812,7 @@ fn testBugInBitVectorNumBytes() {
// for (int x = 0; x < 3518; x++) { // for (int x = 0; x < 3518; x++) {
builder.push('0'); builder.push('0');
} }
assert!(encoder::encode(&builder, ErrorCorrectionLevel::L).is_ok()); assert!(qrcode_encoder::encode(&builder, ErrorCorrectionLevel::L).is_ok());
} }
#[test] #[test]

View File

@@ -26,7 +26,7 @@ use crate::{
use unicode_segmentation::UnicodeSegmentation; use unicode_segmentation::UnicodeSegmentation;
use super::encoder; use super::qrcode_encoder;
pub enum VersionSize { pub enum VersionSize {
SMALL, //("version 1-9"), SMALL, //("version 1-9"),
@@ -155,7 +155,7 @@ impl MinimalEncoder {
if let Some(version) = version { if let Some(version) = version {
// compute minimal encoding for a given version // compute minimal encoding for a given version
let result = self.encodeSpecificVersion(version)?; let result = self.encodeSpecificVersion(version)?;
if !encoder::willFit( if !qrcode_encoder::willFit(
result.getSize(), result.getSize(),
Self::getVersion(Self::getVersionSize(result.getVersion())), Self::getVersion(Self::getVersionSize(result.getVersion())),
&self.ecLevel, &self.ecLevel,
@@ -183,7 +183,8 @@ impl MinimalEncoder {
for i in 0..3 { for i in 0..3 {
// for (int i = 0; i < 3; i++) { // for (int i = 0; i < 3; i++) {
let size = results[i].getSize(); let size = results[i].getSize();
if encoder::willFit(size, versions[i], &self.ecLevel) && size < smallestSize { if qrcode_encoder::willFit(size, versions[i], &self.ecLevel) && size < smallestSize
{
smallestSize = size; smallestSize = size;
smallestRXingResult = i as i32; smallestRXingResult = i as i32;
} }
@@ -235,13 +236,13 @@ impl MinimalEncoder {
} }
pub fn isDoubleByteKanji(c: &str) -> bool { pub fn isDoubleByteKanji(c: &str) -> bool {
encoder::isOnlyDoubleByteKanji(c) qrcode_encoder::isOnlyDoubleByteKanji(c)
} }
pub fn isAlphanumeric(c: &str) -> bool { pub fn isAlphanumeric(c: &str) -> bool {
if c.len() == 1 { if c.len() == 1 {
let ch = c.chars().next().unwrap(); let ch = c.chars().next().unwrap();
encoder::getAlphanumericCode(ch as u32) != -1 qrcode_encoder::getAlphanumericCode(ch as u32) != -1
} else { } else {
false false
} }
@@ -612,6 +613,7 @@ pub struct Edge {
_stringToEncode: Vec<String>, _stringToEncode: Vec<String>,
} }
impl Edge { impl Edge {
#[allow(clippy::too_many_arguments)]
pub fn new( pub fn new(
mode: Mode, mode: Mode,
fromPosition: usize, fromPosition: usize,
@@ -881,7 +883,7 @@ impl RXingResultList {
let size = Self::internal_static_get_size(version, &list); let size = Self::internal_static_get_size(version, &list);
// increase version if needed // increase version if needed
while versionNumber < upperLimit while versionNumber < upperLimit
&& !encoder::willFit( && !qrcode_encoder::willFit(
size, size,
Version::getVersionForNumber(versionNumber).unwrap(), Version::getVersionForNumber(versionNumber).unwrap(),
ecLevel, ecLevel,
@@ -891,7 +893,7 @@ impl RXingResultList {
} }
// shrink version if possible // shrink version if possible
while versionNumber > lowerLimit while versionNumber > lowerLimit
&& encoder::willFit( && qrcode_encoder::willFit(
size, size,
Version::getVersionForNumber(versionNumber - 1).unwrap(), Version::getVersionForNumber(versionNumber - 1).unwrap(),
ecLevel, ecLevel,
@@ -1084,7 +1086,7 @@ impl RXingResultNode {
bits.appendBits(self.encoders.getECIValue(self.charsetEncoderIndex), 8)?; bits.appendBits(self.encoders.getECIValue(self.charsetEncoderIndex), 8)?;
} else if self.characterLength > 0 { } else if self.characterLength > 0 {
// append data // append data
encoder::appendBytes( qrcode_encoder::appendBytes(
// &self.stringToEncode[self.fromPosition as usize // &self.stringToEncode[self.fromPosition as usize
// ..(self.fromPosition + self.characterLength as usize)], // ..(self.fromPosition + self.characterLength as usize)],
&(self &(self

View File

@@ -1,10 +1,10 @@
mod block_pair; mod block_pair;
mod byte_matrix; mod byte_matrix;
pub mod encoder;
pub mod mask_util; pub mod mask_util;
pub mod matrix_util; pub mod matrix_util;
mod minimal_encoder; mod minimal_encoder;
mod qr_code; mod qr_code;
pub mod qrcode_encoder;
pub use block_pair::*; pub use block_pair::*;
pub use byte_matrix::*; pub use byte_matrix::*;

View File

@@ -23,7 +23,7 @@ use crate::{
}; };
use super::{ use super::{
decoder::{decoder, QRCodeDecoderMetaData}, decoder::{qrcode_decoder, QRCodeDecoderMetaData},
detector::Detector, detector::Detector,
}; };
@@ -64,13 +64,13 @@ impl Reader for QRCodeReader {
let mut points: Vec<RXingResultPoint>; let mut points: Vec<RXingResultPoint>;
if hints.contains_key(&DecodeHintType::PURE_BARCODE) { if hints.contains_key(&DecodeHintType::PURE_BARCODE) {
let bits = Self::extractPureBits(image.getBlackMatrix())?; let bits = Self::extractPureBits(image.getBlackMatrix())?;
decoderRXingResult = decoder::decode_bitmatrix_with_hints(&bits, hints)?; decoderRXingResult = qrcode_decoder::decode_bitmatrix_with_hints(&bits, hints)?;
points = Vec::new(); points = Vec::new();
} else { } else {
let detectorRXingResult = let detectorRXingResult =
Detector::new(image.getBlackMatrix()).detect_with_hints(hints)?; Detector::new(image.getBlackMatrix()).detect_with_hints(hints)?;
decoderRXingResult = decoderRXingResult =
decoder::decode_bitmatrix_with_hints(detectorRXingResult.getBits(), hints)?; qrcode_decoder::decode_bitmatrix_with_hints(detectorRXingResult.getBits(), hints)?;
points = detectorRXingResult.getPoints().clone(); points = detectorRXingResult.getPoints().clone();
} }

View File

@@ -22,7 +22,7 @@ use crate::{
use super::{ use super::{
decoder::ErrorCorrectionLevel, decoder::ErrorCorrectionLevel,
encoder::{encoder, QRCode}, encoder::{qrcode_encoder, QRCode},
}; };
const QUIET_ZONE_SIZE: i32 = 4; const QUIET_ZONE_SIZE: i32 = 4;
@@ -102,7 +102,7 @@ impl Writer for QRCodeWriter {
} }
// } // }
let code = encoder::encode_with_hints(contents, errorCorrectionLevel, hints)?; let code = qrcode_encoder::encode_with_hints(contents, errorCorrectionLevel, hints)?;
Self::renderRXingResult(&code, width, height, quietZone) Self::renderRXingResult(&code, width, height, quietZone)
} }