diff --git a/src/qrcode/encoder/EncoderTestCase.rs b/src/qrcode/encoder/EncoderTestCase.rs index e192580..3973477 100644 --- a/src/qrcode/encoder/EncoderTestCase.rs +++ b/src/qrcode/encoder/EncoderTestCase.rs @@ -415,7 +415,7 @@ fn testAppendLengthInfo() { Version::getVersionForNumber(1).unwrap(), Mode::NUMERIC, &mut bits, - ); + ).expect("ok"); assert_eq!(" ........ .X", bits.to_string()); // 10 bits. let mut bits = BitArray::new(); encoder::appendLengthInfo( @@ -423,7 +423,7 @@ fn testAppendLengthInfo() { Version::getVersionForNumber(10).unwrap(), Mode::ALPHANUMERIC, &mut bits, - ); + ).expect("ok"); assert_eq!(" ........ .X.", bits.to_string()); // 11 bits. let mut bits = BitArray::new(); encoder::appendLengthInfo( @@ -431,7 +431,7 @@ fn testAppendLengthInfo() { Version::getVersionForNumber(27).unwrap(), Mode::BYTE, &mut bits, - ); + ).expect("ok"); assert_eq!(" ........ XXXXXXXX", bits.to_string()); // 16 bits. let mut bits = BitArray::new(); encoder::appendLengthInfo( @@ -439,7 +439,7 @@ fn testAppendLengthInfo() { Version::getVersionForNumber(40).unwrap(), Mode::KANJI, &mut bits, - ); + ).expect("ok"); assert_eq!(" ..X..... ....", bits.to_string()); // 12 bits. } @@ -453,7 +453,7 @@ fn testAppendBytes() { Mode::NUMERIC, &mut bits, encoder::DEFAULT_BYTE_MODE_ENCODING, - ); + ).expect("ok"); assert_eq!(" ...X", bits.to_string()); // Should use appendAlphanumericBytes. // A = 10 = 0xa = 001010 in 6 bits @@ -463,7 +463,7 @@ fn testAppendBytes() { Mode::ALPHANUMERIC, &mut bits, encoder::DEFAULT_BYTE_MODE_ENCODING, - ); + ).expect("ok"); assert_eq!(" ..X.X.", bits.to_string()); // Lower letters such as 'a' cannot be encoded in MODE_ALPHANUMERIC. //try { @@ -488,7 +488,7 @@ fn testAppendBytes() { Mode::BYTE, &mut bits, encoder::DEFAULT_BYTE_MODE_ENCODING, - ); + ).expect("ok"); assert_eq!(" .XX....X .XX...X. .XX...XX", bits.to_string()); // Anything can be encoded in QRCode.MODE_8BIT_BYTE. encoder::appendBytes( @@ -496,7 +496,7 @@ fn testAppendBytes() { Mode::BYTE, &mut bits, encoder::DEFAULT_BYTE_MODE_ENCODING, - ); + ).expect("ok"); // Should use appendKanjiBytes. // 0x93, 0x5f let mut bits = BitArray::new(); @@ -505,7 +505,7 @@ fn testAppendBytes() { Mode::KANJI, &mut bits, encoder::DEFAULT_BYTE_MODE_ENCODING, - ); + ).expect("ok"); assert_eq!(" .XX.XX.. XXXXX", bits.to_string()); } @@ -540,95 +540,82 @@ fn testTerminateBits() { #[test] fn testGetNumDataBytesAndNumECBytesForBlockID() { - let mut numDataBytes = vec![0; 1]; - let mut numEcBytes = vec![0; 1]; + // Version 1-H. - encoder::getNumDataBytesAndNumECBytesForBlockID( + let (numDataBytes,numEcBytes) = encoder::getNumDataBytesAndNumECBytesForBlockID( 26, 9, 1, 0, - &mut numDataBytes, - &mut numEcBytes, - ); - assert_eq!(9, numDataBytes[0]); - assert_eq!(17, numEcBytes[0]); + ).expect("ok"); + assert_eq!(9, numDataBytes); + assert_eq!(17, numEcBytes); // Version 3-H. 2 blocks. - encoder::getNumDataBytesAndNumECBytesForBlockID( + let (numDataBytes,numEcBytes) =encoder::getNumDataBytesAndNumECBytesForBlockID( 70, 26, 2, 0, - &mut numDataBytes, - &mut numEcBytes, - ); - assert_eq!(13, numDataBytes[0]); - assert_eq!(22, numEcBytes[0]); - encoder::getNumDataBytesAndNumECBytesForBlockID( + ).expect("ok"); + assert_eq!(13, numDataBytes); + assert_eq!(22, numEcBytes); + let (numDataBytes,numEcBytes) =encoder::getNumDataBytesAndNumECBytesForBlockID( 70, 26, 2, 1, - &mut numDataBytes, - &mut numEcBytes, - ); - assert_eq!(13, numDataBytes[0]); - assert_eq!(22, numEcBytes[0]); + ).expect("ok"); + assert_eq!(13, numDataBytes); + assert_eq!(22, numEcBytes); // Version 7-H. (4 + 1) blocks. - encoder::getNumDataBytesAndNumECBytesForBlockID( + let (numDataBytes,numEcBytes) =encoder::getNumDataBytesAndNumECBytesForBlockID( 196, 66, 5, 0, - &mut numDataBytes, - &mut numEcBytes, - ); - assert_eq!(13, numDataBytes[0]); - assert_eq!(26, numEcBytes[0]); - encoder::getNumDataBytesAndNumECBytesForBlockID( + + ).expect("ok"); + assert_eq!(13, numDataBytes); + assert_eq!(26, numEcBytes); + let (numDataBytes,numEcBytes) =encoder::getNumDataBytesAndNumECBytesForBlockID( 196, 66, 5, 4, - &mut numDataBytes, - &mut numEcBytes, - ); - assert_eq!(14, numDataBytes[0]); - assert_eq!(26, numEcBytes[0]); + + ).expect("ok"); + assert_eq!(14, numDataBytes); + assert_eq!(26, numEcBytes); // Version 40-H. (20 + 61) blocks. - encoder::getNumDataBytesAndNumECBytesForBlockID( + let (numDataBytes,numEcBytes) =encoder::getNumDataBytesAndNumECBytesForBlockID( 3706, 1276, 81, 0, - &mut numDataBytes, - &mut numEcBytes, - ); - assert_eq!(15, numDataBytes[0]); - assert_eq!(30, numEcBytes[0]); - encoder::getNumDataBytesAndNumECBytesForBlockID( + ).expect("ok"); + assert_eq!(15, numDataBytes); + assert_eq!(30, numEcBytes); + + let (numDataBytes,numEcBytes) =encoder::getNumDataBytesAndNumECBytesForBlockID( 3706, 1276, 81, 20, - &mut numDataBytes, - &mut numEcBytes, - ); - assert_eq!(16, numDataBytes[0]); - assert_eq!(30, numEcBytes[0]); - encoder::getNumDataBytesAndNumECBytesForBlockID( + ).expect("ok"); + assert_eq!(16, numDataBytes); + assert_eq!(30, numEcBytes); + + let (numDataBytes,numEcBytes) =encoder::getNumDataBytesAndNumECBytesForBlockID( 3706, 1276, 81, 80, - &mut numDataBytes, - &mut numEcBytes, - ); - assert_eq!(16, numDataBytes[0]); - assert_eq!(30, numEcBytes[0]); + ).expect("ok"); + assert_eq!(16, numDataBytes); + assert_eq!(30, numEcBytes); } #[test] @@ -637,7 +624,7 @@ fn testInterleaveWithECBytes() { let mut in_ = BitArray::new(); for dataByte in dataBytes { // for (byte dataByte: dataBytes) { - in_.appendBits(*dataByte, 8); + in_.appendBits(*dataByte, 8).expect("ok"); } let out = encoder::interleaveWithECBytes(&in_, 26, 9, 1).expect("encode"); let expected = &[ @@ -663,7 +650,7 @@ fn testInterleaveWithECBytes() { in_ = BitArray::new(); for dataByte in dataBytes { // for (byte dataByte: dataBytes) { - in_.appendBits(*dataByte, 8); + in_.appendBits(*dataByte, 8).expect("ok"); } let out = encoder::interleaveWithECBytes(&in_, 134, 62, 4).expect("interleave ok"); @@ -843,7 +830,7 @@ fn testBugInBitVectorNumBytes() { // for (int x = 0; x < 3518; x++) { builder.push('0'); } - encoder::encode(&builder, ErrorCorrectionLevel::L); + assert!(encoder::encode(&builder, ErrorCorrectionLevel::L).is_ok()); } #[test] diff --git a/src/qrcode/encoder/encoder.rs b/src/qrcode/encoder/encoder.rs index 8790a77..99640a1 100644 --- a/src/qrcode/encoder/encoder.rs +++ b/src/qrcode/encoder/encoder.rs @@ -493,9 +493,9 @@ pub fn getNumDataBytesAndNumECBytesForBlockID( numDataBytes: u32, numRSBlocks: u32, blockID: u32, - numDataBytesInBlock: &mut [u32], - numECBytesInBlock: &mut [u32], -) -> Result<(), Exceptions> { + // numDataBytesInBlock: &mut [u32], + // numECBytesInBlock: &mut [u32], +) -> Result<(u32,u32), Exceptions> { if blockID >= numRSBlocks { return Err(Exceptions::WriterException("Block ID too large".to_owned())); // throw new WriterException("Block ID too large"); @@ -540,14 +540,11 @@ pub fn getNumDataBytesAndNumECBytesForBlockID( // throw new WriterException("Total bytes mismatch"); } - if blockID < numRsBlocksInGroup1 { - numDataBytesInBlock[0] = numDataBytesInGroup1; - numECBytesInBlock[0] = numEcBytesInGroup1; + Ok(if blockID < numRsBlocksInGroup1 { + (numDataBytesInGroup1,numEcBytesInGroup1) } else { - numDataBytesInBlock[0] = numDataBytesInGroup2; - numECBytesInBlock[0] = numEcBytesInGroup2; - } - Ok(()) + (numDataBytesInGroup2,numEcBytesInGroup2) + }) } /** @@ -578,26 +575,26 @@ pub fn interleaveWithECBytes( for i in 0..numRSBlocks { // for (int i = 0; i < numRSBlocks; ++i) { - let mut numDataBytesInBlock = vec![0; 1]; //new int[1]; - let mut numEcBytesInBlock = vec![0; 1]; //new int[1]; - getNumDataBytesAndNumECBytesForBlockID( + // let mut numDataBytesInBlock = vec![0; 1]; //new int[1]; + // let mut numEcBytesInBlock = vec![0; 1]; //new int[1]; + let (numDataBytesInBlock, numEcBytesInBlock) = getNumDataBytesAndNumECBytesForBlockID( numTotalBytes, numDataBytes, numRSBlocks, i, - &mut numDataBytesInBlock, - &mut numEcBytesInBlock, + // &mut numDataBytesInBlock, + // &mut numEcBytesInBlock, )?; - let size = numDataBytesInBlock[0]; + let size = numDataBytesInBlock; let mut dataBytes = vec![0u8; size as usize]; bits.toBytes(8 * dataBytesOffset, &mut dataBytes, 0, size as usize); - let ecBytes = generateECBytes(&dataBytes, numEcBytesInBlock[0] as usize); + let ecBytes = generateECBytes(&dataBytes, numEcBytesInBlock as usize); blocks.push(BlockPair::new(dataBytes, ecBytes.clone())); maxNumDataBytes = maxNumDataBytes.max(size); maxNumEcBytes = maxNumEcBytes.max(ecBytes.len()); - dataBytesOffset += numDataBytesInBlock[0] as usize; + dataBytesOffset += numDataBytesInBlock as usize; } if numDataBytes != dataBytesOffset as u32 { return Err(Exceptions::WriterException( @@ -624,12 +621,12 @@ pub fn interleaveWithECBytes( for block in &blocks { // for (BlockPair block : blocks) { let ecBytes = block.getErrorCorrectionBytes(); - if (i < ecBytes.len()) { + if i < ecBytes.len() { result.appendBits(ecBytes[i] as u32, 8)?; } } } - if (numTotalBytes != result.getSizeInBytes() as u32) { + if numTotalBytes != result.getSizeInBytes() as u32 { // Should be same. return Err(Exceptions::WriterException(format!( "Interleaving error: {} and {} differ.", @@ -654,7 +651,7 @@ pub fn generateECBytes(dataBytes: &[u8], numEcBytesInBlock: usize) -> Vec { ReedSolomonEncoder::new(get_predefined_genericgf( PredefinedGenericGF::QrCodeField256, )) - .encode(&mut toEncode, numEcBytesInBlock); + .encode(&mut toEncode, numEcBytesInBlock).expect("rs encode must complete"); let mut ecBytes = vec![0u8; numEcBytesInBlock]; for i in 0..numEcBytesInBlock {