mirror of
https://github.com/starovoid/rxing.git
synced 2026-07-26 04:12:34 +00:00
refactor to use exception helper factories
This commit is contained in:
@@ -65,13 +65,13 @@ impl OneDReader for CodaBarReader {
|
||||
loop {
|
||||
let charOffset = self.toNarrowWidePattern(nextStart);
|
||||
if charOffset == -1 {
|
||||
return Err(Exceptions::NotFoundException(None));
|
||||
return Err(Exceptions::notFoundEmpty());
|
||||
}
|
||||
// Hack: We store the position in the alphabet table into a
|
||||
// StringBuilder, so that we can access the decoded patterns in
|
||||
// validatePattern. We'll translate to the actual characters later.
|
||||
self.decodeRowRXingResult
|
||||
.push(char::from_u32(charOffset as u32).ok_or(Exceptions::ParseException(None))?);
|
||||
.push(char::from_u32(charOffset as u32).ok_or(Exceptions::parseEmpty())?);
|
||||
nextStart += 8;
|
||||
// Stop as soon as we see the end character.
|
||||
if self.decodeRowRXingResult.chars().count() > 1
|
||||
@@ -99,7 +99,7 @@ impl OneDReader for CodaBarReader {
|
||||
// otherwise this is probably a false positive. The exception is if we are
|
||||
// at the end of the row. (I.e. the barcode barely fits.)
|
||||
if nextStart < self.counterLength && trailingWhitespace < lastPatternSize / 2 {
|
||||
return Err(Exceptions::NotFoundException(None));
|
||||
return Err(Exceptions::notFoundEmpty());
|
||||
}
|
||||
|
||||
self.validatePattern(startOffset)?;
|
||||
@@ -113,7 +113,7 @@ impl OneDReader for CodaBarReader {
|
||||
.decodeRowRXingResult
|
||||
.chars()
|
||||
.nth(i)
|
||||
.ok_or(Exceptions::IndexOutOfBoundsException(None))?
|
||||
.ok_or(Exceptions::indexOutOfBoundsEmpty())?
|
||||
as usize]
|
||||
.to_string(),
|
||||
);
|
||||
@@ -123,23 +123,23 @@ impl OneDReader for CodaBarReader {
|
||||
.decodeRowRXingResult
|
||||
.chars()
|
||||
.next()
|
||||
.ok_or(Exceptions::IndexOutOfBoundsException(None))?;
|
||||
.ok_or(Exceptions::indexOutOfBoundsEmpty())?;
|
||||
if !Self::arrayContains(&Self::STARTEND_ENCODING, startchar) {
|
||||
return Err(Exceptions::NotFoundException(None));
|
||||
return Err(Exceptions::notFoundEmpty());
|
||||
}
|
||||
let endchar = self
|
||||
.decodeRowRXingResult
|
||||
.chars()
|
||||
.nth(self.decodeRowRXingResult.chars().count() - 1)
|
||||
.ok_or(Exceptions::IndexOutOfBoundsException(None))?;
|
||||
.ok_or(Exceptions::indexOutOfBoundsEmpty())?;
|
||||
if !Self::arrayContains(&Self::STARTEND_ENCODING, endchar) {
|
||||
return Err(Exceptions::NotFoundException(None));
|
||||
return Err(Exceptions::notFoundEmpty());
|
||||
}
|
||||
|
||||
// remove stop/start characters character and check if a long enough string is contained
|
||||
if (self.decodeRowRXingResult.chars().count()) <= Self::MIN_CHARACTER_LENGTH as usize {
|
||||
// Almost surely a false positive ( start + stop + at least 1 character)
|
||||
return Err(Exceptions::NotFoundException(None));
|
||||
return Err(Exceptions::notFoundEmpty());
|
||||
}
|
||||
|
||||
if !matches!(
|
||||
@@ -243,7 +243,7 @@ impl CodaBarReader {
|
||||
.decodeRowRXingResult
|
||||
.chars()
|
||||
.nth(i)
|
||||
.ok_or(Exceptions::IndexOutOfBoundsException(None))?
|
||||
.ok_or(Exceptions::indexOutOfBoundsEmpty())?
|
||||
as usize];
|
||||
for j in (0_usize..=6).rev() {
|
||||
// Even j = bars, while odd j = spaces. Categories 2 and 3 are for
|
||||
@@ -282,7 +282,7 @@ impl CodaBarReader {
|
||||
.decodeRowRXingResult
|
||||
.chars()
|
||||
.nth(i)
|
||||
.ok_or(Exceptions::IndexOutOfBoundsException(None))?
|
||||
.ok_or(Exceptions::indexOutOfBoundsEmpty())?
|
||||
as usize];
|
||||
for j in (0usize..=6).rev() {
|
||||
// Even j = bars, while odd j = spaces. Categories 2 and 3 are for
|
||||
@@ -290,7 +290,7 @@ impl CodaBarReader {
|
||||
let category = (j & 1) + ((pattern as usize) & 1) * 2;
|
||||
let size = self.counters[(pos + j)];
|
||||
if (size as f32) < mins[category] || (size as f32) > maxes[category] {
|
||||
return Err(Exceptions::NotFoundException(None));
|
||||
return Err(Exceptions::notFoundEmpty());
|
||||
}
|
||||
pattern >>= 1;
|
||||
}
|
||||
@@ -311,7 +311,7 @@ impl CodaBarReader {
|
||||
let mut i = row.getNextUnset(0);
|
||||
let end = row.getSize();
|
||||
if i >= end {
|
||||
return Err(Exceptions::NotFoundException(None));
|
||||
return Err(Exceptions::notFoundEmpty());
|
||||
}
|
||||
let mut isWhite = true;
|
||||
let mut count = 0;
|
||||
@@ -363,7 +363,7 @@ impl CodaBarReader {
|
||||
|
||||
i += 2;
|
||||
}
|
||||
Err(Exceptions::NotFoundException(None))
|
||||
Err(Exceptions::notFoundEmpty())
|
||||
}
|
||||
|
||||
pub fn arrayContains(array: &[char], key: char) -> bool {
|
||||
|
||||
@@ -43,12 +43,12 @@ impl OneDimensionalCodeWriter for CodaBarWriter {
|
||||
let firstChar = contents
|
||||
.chars()
|
||||
.next()
|
||||
.ok_or(Exceptions::IndexOutOfBoundsException(None))?
|
||||
.ok_or(Exceptions::indexOutOfBoundsEmpty())?
|
||||
.to_ascii_uppercase();
|
||||
let lastChar = contents
|
||||
.chars()
|
||||
.nth(contents.chars().count() - 1)
|
||||
.ok_or(Exceptions::IndexOutOfBoundsException(None))?
|
||||
.ok_or(Exceptions::indexOutOfBoundsEmpty())?
|
||||
.to_ascii_uppercase();
|
||||
let startsNormal = CodaBarReader::arrayContains(&START_END_CHARS, firstChar);
|
||||
let endsNormal = CodaBarReader::arrayContains(&START_END_CHARS, lastChar);
|
||||
@@ -56,26 +56,26 @@ impl OneDimensionalCodeWriter for CodaBarWriter {
|
||||
let endsAlt = CodaBarReader::arrayContains(&ALT_START_END_CHARS, lastChar);
|
||||
if startsNormal {
|
||||
if !endsNormal {
|
||||
return Err(Exceptions::IllegalArgumentException(Some(format!(
|
||||
return Err(Exceptions::illegalArgument(format!(
|
||||
"Invalid start/end guards: {contents}"
|
||||
))));
|
||||
)));
|
||||
}
|
||||
// else already has valid start/end
|
||||
contents.to_owned()
|
||||
} else if startsAlt {
|
||||
if !endsAlt {
|
||||
return Err(Exceptions::IllegalArgumentException(Some(format!(
|
||||
return Err(Exceptions::illegalArgument(format!(
|
||||
"Invalid start/end guards: {contents}"
|
||||
))));
|
||||
)));
|
||||
}
|
||||
// else already has valid start/end
|
||||
contents.to_owned()
|
||||
} else {
|
||||
// Doesn't start with a guard
|
||||
if endsNormal || endsAlt {
|
||||
return Err(Exceptions::IllegalArgumentException(Some(format!(
|
||||
return Err(Exceptions::illegalArgument(format!(
|
||||
"Invalid start/end guards: {contents}"
|
||||
))));
|
||||
)));
|
||||
}
|
||||
// else doesn't end with guard either, so add a default
|
||||
format!("{DEFAULT_GUARD}{contents}{DEFAULT_GUARD}")
|
||||
@@ -93,9 +93,9 @@ impl OneDimensionalCodeWriter for CodaBarWriter {
|
||||
) {
|
||||
resultLength += 10;
|
||||
} else {
|
||||
return Err(Exceptions::IllegalArgumentException(Some(format!(
|
||||
return Err(Exceptions::illegalArgument(format!(
|
||||
"Cannot encode : '{ch}'"
|
||||
))));
|
||||
)));
|
||||
}
|
||||
}
|
||||
// A blank is placed between each character.
|
||||
@@ -108,7 +108,7 @@ impl OneDimensionalCodeWriter for CodaBarWriter {
|
||||
let mut c = contents
|
||||
.chars()
|
||||
.nth(index)
|
||||
.ok_or(Exceptions::IndexOutOfBoundsException(None))?
|
||||
.ok_or(Exceptions::indexOutOfBoundsEmpty())?
|
||||
.to_ascii_uppercase();
|
||||
if index == 0 || index == contents.chars().count() - 1 {
|
||||
// The start/end chars are not in the CodaBarReader.ALPHABET.
|
||||
|
||||
@@ -50,7 +50,7 @@ impl OneDReader for Code128Reader {
|
||||
CODE_START_A => CODE_CODE_A,
|
||||
CODE_START_B => CODE_CODE_B,
|
||||
CODE_START_C => CODE_CODE_C,
|
||||
_ => return Err(Exceptions::FormatException(None)),
|
||||
_ => return Err(Exceptions::formatEmpty()),
|
||||
};
|
||||
|
||||
let mut done = false;
|
||||
@@ -100,9 +100,7 @@ impl OneDReader for Code128Reader {
|
||||
|
||||
// Take care of illegal start codes
|
||||
match code {
|
||||
CODE_START_A | CODE_START_B | CODE_START_C => {
|
||||
return Err(Exceptions::FormatException(None))
|
||||
}
|
||||
CODE_START_A | CODE_START_B | CODE_START_C => return Err(Exceptions::formatEmpty()),
|
||||
_ => {}
|
||||
}
|
||||
|
||||
@@ -296,21 +294,21 @@ impl OneDReader for Code128Reader {
|
||||
row.getSize().min(nextStart + (nextStart - lastStart) / 2),
|
||||
false,
|
||||
)? {
|
||||
return Err(Exceptions::NotFoundException(None));
|
||||
return Err(Exceptions::notFoundEmpty());
|
||||
}
|
||||
|
||||
// Pull out from sum the value of the penultimate check code
|
||||
checksumTotal -= multiplier as usize * lastCode as usize;
|
||||
// lastCode is the checksum then:
|
||||
if (checksumTotal % 103) as u8 != lastCode {
|
||||
return Err(Exceptions::ChecksumException(None));
|
||||
return Err(Exceptions::checksumEmpty());
|
||||
}
|
||||
|
||||
// Need to pull out the check digits from string
|
||||
let resultLength = result.chars().count();
|
||||
if resultLength == 0 {
|
||||
// false positive
|
||||
return Err(Exceptions::NotFoundException(None));
|
||||
return Err(Exceptions::notFoundEmpty());
|
||||
}
|
||||
|
||||
// Only bother if the result had at least one character, and if the checksum digit happened to
|
||||
@@ -331,9 +329,7 @@ impl OneDReader for Code128Reader {
|
||||
let rawCodesSize = rawCodes.len();
|
||||
let mut rawBytes = vec![0u8; rawCodesSize];
|
||||
for (i, rawByte) in rawBytes.iter_mut().enumerate().take(rawCodesSize) {
|
||||
*rawByte = *rawCodes
|
||||
.get(i)
|
||||
.ok_or(Exceptions::IndexOutOfBoundsException(None))?;
|
||||
*rawByte = *rawCodes.get(i).ok_or(Exceptions::indexOutOfBoundsEmpty())?;
|
||||
}
|
||||
let mut resultObject = RXingResult::new(
|
||||
&result,
|
||||
@@ -407,7 +403,7 @@ impl Code128Reader {
|
||||
}
|
||||
}
|
||||
|
||||
Err(Exceptions::NotFoundException(None))
|
||||
Err(Exceptions::notFoundEmpty())
|
||||
}
|
||||
|
||||
fn decodeCode(
|
||||
@@ -432,7 +428,7 @@ impl Code128Reader {
|
||||
if bestMatch >= 0 {
|
||||
Ok(bestMatch as u8)
|
||||
} else {
|
||||
Err(Exceptions::NotFoundException(None))
|
||||
Err(Exceptions::notFoundEmpty())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -99,23 +99,23 @@ fn check(contents: &str, hints: &crate::EncodingHintDictionary) -> Result<i32, E
|
||||
let length = contents.chars().count();
|
||||
// Check length
|
||||
if !(1..=80).contains(&length) {
|
||||
return Err(Exceptions::IllegalArgumentException(Some(format!(
|
||||
return Err(Exceptions::illegalArgument(format!(
|
||||
"Contents length should be between 1 and 80 characters, but got {length}"
|
||||
))));
|
||||
)));
|
||||
}
|
||||
|
||||
// Check for forced code set hint.
|
||||
let mut forcedCodeSet = -1_i32;
|
||||
if hints.contains_key(&EncodeHintType::FORCE_CODE_SET) {
|
||||
let Some(EncodeHintValue::ForceCodeSet(codeSetHint)) = hints.get(&EncodeHintType::FORCE_CODE_SET) else { return Err(Exceptions::IllegalStateException(None)) };
|
||||
let Some(EncodeHintValue::ForceCodeSet(codeSetHint)) = hints.get(&EncodeHintType::FORCE_CODE_SET) else { return Err(Exceptions::illegalStateEmpty()) };
|
||||
match codeSetHint.as_str() {
|
||||
"A" => forcedCodeSet = CODE_CODE_A as i32,
|
||||
"B" => forcedCodeSet = CODE_CODE_B as i32,
|
||||
"C" => forcedCodeSet = CODE_CODE_C as i32,
|
||||
_ => {
|
||||
return Err(Exceptions::IllegalArgumentException(Some(format!(
|
||||
return Err(Exceptions::illegalArgument(format!(
|
||||
"Unsupported code set hint: {codeSetHint}"
|
||||
))))
|
||||
)))
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -134,9 +134,9 @@ fn check(contents: &str, hints: &crate::EncodingHintDictionary) -> Result<i32, E
|
||||
if c > 127 {
|
||||
// no full Latin-1 character set available at the moment
|
||||
// shift and manual code change are not supported
|
||||
return Err(Exceptions::IllegalArgumentException(Some(format!(
|
||||
return Err(Exceptions::illegalArgument(format!(
|
||||
"Bad character in input: ASCII value={c}"
|
||||
))));
|
||||
)));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -149,18 +149,18 @@ fn check(contents: &str, hints: &crate::EncodingHintDictionary) -> Result<i32, E
|
||||
// allows no ascii above 95 (no lower caps, no special symbols)
|
||||
{
|
||||
if c > 95 && c <= 127 {
|
||||
return Err(Exceptions::IllegalArgumentException(Some(format!(
|
||||
return Err(Exceptions::illegalArgument(format!(
|
||||
"Bad character in input for forced code set A: ASCII value={c}"
|
||||
))));
|
||||
)));
|
||||
}
|
||||
}
|
||||
CODE_CODE_B_I32 =>
|
||||
// allows no ascii below 32 (terminal symbols)
|
||||
{
|
||||
if c <= 32 {
|
||||
return Err(Exceptions::IllegalArgumentException(Some(format!(
|
||||
return Err(Exceptions::illegalArgument(format!(
|
||||
"Bad character in input for forced code set B: ASCII value={c}"
|
||||
))));
|
||||
)));
|
||||
}
|
||||
}
|
||||
CODE_CODE_C_I32 =>
|
||||
@@ -172,9 +172,9 @@ fn check(contents: &str, hints: &crate::EncodingHintDictionary) -> Result<i32, E
|
||||
|| ch == ESCAPE_FNC_3
|
||||
|| ch == ESCAPE_FNC_4
|
||||
{
|
||||
return Err(Exceptions::IllegalArgumentException(Some(format!(
|
||||
return Err(Exceptions::illegalArgument(format!(
|
||||
"Bad character in input for forced code set C: ASCII value={c}"
|
||||
))));
|
||||
)));
|
||||
}
|
||||
}
|
||||
_ => {}
|
||||
@@ -195,8 +195,7 @@ fn encodeFast(contents: &str, forcedCodeSet: i32) -> Result<Vec<bool>, Exception
|
||||
while position < length {
|
||||
//Select code to use
|
||||
let newCodeSet = if forcedCodeSet == -1 {
|
||||
chooseCode(contents, position, codeSet)
|
||||
.ok_or(Exceptions::IllegalStateException(None))?
|
||||
chooseCode(contents, position, codeSet).ok_or(Exceptions::illegalStateEmpty())?
|
||||
} else {
|
||||
forcedCodeSet as usize // THIS IS RISKY
|
||||
};
|
||||
@@ -209,7 +208,7 @@ fn encodeFast(contents: &str, forcedCodeSet: i32) -> Result<Vec<bool>, Exception
|
||||
match contents
|
||||
.chars()
|
||||
.nth(position)
|
||||
.ok_or(Exceptions::IndexOutOfBoundsException(None))?
|
||||
.ok_or(Exceptions::indexOutOfBoundsEmpty())?
|
||||
{
|
||||
ESCAPE_FNC_1 => patternIndex = CODE_FNC_1 as isize,
|
||||
ESCAPE_FNC_2 => patternIndex = CODE_FNC_2 as isize,
|
||||
@@ -229,7 +228,7 @@ fn encodeFast(contents: &str, forcedCodeSet: i32) -> Result<Vec<bool>, Exception
|
||||
patternIndex = contents
|
||||
.chars()
|
||||
.nth(position)
|
||||
.ok_or(Exceptions::IndexOutOfBoundsException(None))?
|
||||
.ok_or(Exceptions::indexOutOfBoundsEmpty())?
|
||||
as isize
|
||||
- ' ' as isize;
|
||||
if patternIndex < 0 {
|
||||
@@ -241,7 +240,7 @@ fn encodeFast(contents: &str, forcedCodeSet: i32) -> Result<Vec<bool>, Exception
|
||||
patternIndex = contents
|
||||
.chars()
|
||||
.nth(position)
|
||||
.ok_or(Exceptions::IndexOutOfBoundsException(None))?
|
||||
.ok_or(Exceptions::indexOutOfBoundsEmpty())?
|
||||
as isize
|
||||
- ' ' as isize
|
||||
}
|
||||
@@ -249,9 +248,9 @@ fn encodeFast(contents: &str, forcedCodeSet: i32) -> Result<Vec<bool>, Exception
|
||||
// CODE_CODE_C
|
||||
if position + 1 == length {
|
||||
// this is the last character, but the encoding is C, which always encodes two characers
|
||||
return Err(Exceptions::IllegalArgumentException(Some(
|
||||
return Err(Exceptions::illegalArgument(
|
||||
"Bad number of characters for digit only encoding.".to_owned(),
|
||||
)));
|
||||
));
|
||||
}
|
||||
let s: String = contents
|
||||
.char_indices()
|
||||
@@ -260,7 +259,7 @@ fn encodeFast(contents: &str, forcedCodeSet: i32) -> Result<Vec<bool>, Exception
|
||||
.map(|(_u, c)| c)
|
||||
.collect();
|
||||
patternIndex = s.parse::<isize>().map_err(|e| {
|
||||
Exceptions::ParseException(Some(format!("issue parsing {s}: {e}")))
|
||||
Exceptions::parse(format!("issue parsing {s}: {e}"))
|
||||
})?;
|
||||
position += 1;
|
||||
} // Also incremented below
|
||||
@@ -536,7 +535,7 @@ stuvwxyz{|}~\u{007F}\u{00FF}";
|
||||
if contents
|
||||
.chars()
|
||||
.nth(i)
|
||||
.ok_or(Exceptions::IndexOutOfBoundsException(None))?
|
||||
.ok_or(Exceptions::indexOutOfBoundsEmpty())?
|
||||
== ESCAPE_FNC_1
|
||||
{
|
||||
addPattern(
|
||||
@@ -555,9 +554,8 @@ stuvwxyz{|}~\u{007F}\u{00FF}";
|
||||
.collect();
|
||||
addPattern(
|
||||
&mut patterns,
|
||||
s.parse::<usize>().map_err(|e| {
|
||||
Exceptions::ParseException(Some(format!("unable to parse {s} {e}")))
|
||||
})?,
|
||||
s.parse::<usize>()
|
||||
.map_err(|e| Exceptions::parse(format!("unable to parse {s} {e}")))?,
|
||||
&mut checkSum,
|
||||
&mut checkWeight,
|
||||
i,
|
||||
@@ -572,7 +570,7 @@ stuvwxyz{|}~\u{007F}\u{00FF}";
|
||||
let mut patternIndex = match contents
|
||||
.chars()
|
||||
.nth(i)
|
||||
.ok_or(Exceptions::IndexOutOfBoundsException(None))?
|
||||
.ok_or(Exceptions::indexOutOfBoundsEmpty())?
|
||||
{
|
||||
ESCAPE_FNC_1 => CODE_FNC_1 as isize,
|
||||
ESCAPE_FNC_2 => CODE_FNC_2 as isize,
|
||||
@@ -590,7 +588,7 @@ stuvwxyz{|}~\u{007F}\u{00FF}";
|
||||
contents
|
||||
.chars()
|
||||
.nth(i)
|
||||
.ok_or(Exceptions::IndexOutOfBoundsException(None))?
|
||||
.ok_or(Exceptions::indexOutOfBoundsEmpty())?
|
||||
as isize
|
||||
- ' ' as isize
|
||||
}
|
||||
@@ -682,7 +680,7 @@ stuvwxyz{|}~\u{007F}\u{00FF}";
|
||||
minPath: &mut Vec<Vec<Latch>>,
|
||||
) -> Result<u32, Exceptions> {
|
||||
if position >= contents.chars().count() {
|
||||
return Err(Exceptions::IllegalStateException(None));
|
||||
return Err(Exceptions::illegalStateEmpty());
|
||||
}
|
||||
let mCost = memoizedCost[charset.ordinal()][position];
|
||||
if mCost > 0 {
|
||||
@@ -763,10 +761,10 @@ stuvwxyz{|}~\u{007F}\u{00FF}";
|
||||
}
|
||||
}
|
||||
if minCost == u32::MAX {
|
||||
return Err(Exceptions::IllegalArgumentException(Some(format!(
|
||||
return Err(Exceptions::illegalArgument(format!(
|
||||
"Bad character in input: ASCII value={}",
|
||||
contents.chars().nth(position).unwrap_or('x')
|
||||
))));
|
||||
)));
|
||||
// throw new IllegalArgumentException("Bad character in input: ASCII value=" + (int) contents.charAt(position));
|
||||
}
|
||||
memoizedCost[charset.ordinal()][position] = minCost;
|
||||
|
||||
@@ -60,7 +60,7 @@ impl OneDReader for Code39Reader {
|
||||
one_d_reader::recordPattern(row, nextStart, &mut counters)?;
|
||||
let pattern = Self::toNarrowWidePattern(&counters);
|
||||
if pattern < 0 {
|
||||
return Err(Exceptions::NotFoundException(None));
|
||||
return Err(Exceptions::notFoundEmpty());
|
||||
}
|
||||
decodedChar = Self::patternToChar(pattern as u32)?;
|
||||
self.decodeRowRXingResult.push(decodedChar);
|
||||
@@ -85,7 +85,7 @@ impl OneDReader for Code39Reader {
|
||||
// If 50% of last pattern size, following last pattern, is not whitespace, fail
|
||||
// (but if it's whitespace to the very end of the image, that's OK)
|
||||
if nextStart != end && (whiteSpaceAfterEnd * 2) < lastPatternSize as usize {
|
||||
return Err(Exceptions::NotFoundException(None));
|
||||
return Err(Exceptions::notFoundEmpty());
|
||||
}
|
||||
|
||||
if self.usingCheckDigit {
|
||||
@@ -96,7 +96,7 @@ impl OneDReader for Code39Reader {
|
||||
self.decodeRowRXingResult
|
||||
.chars()
|
||||
.nth(i)
|
||||
.ok_or(Exceptions::IndexOutOfBoundsException(None))?,
|
||||
.ok_or(Exceptions::indexOutOfBoundsEmpty())?,
|
||||
) {
|
||||
total += pos;
|
||||
}
|
||||
@@ -105,20 +105,20 @@ impl OneDReader for Code39Reader {
|
||||
.decodeRowRXingResult
|
||||
.chars()
|
||||
.nth(max)
|
||||
.ok_or(Exceptions::IndexOutOfBoundsException(None))?
|
||||
.ok_or(Exceptions::indexOutOfBoundsEmpty())?
|
||||
!= Self::ALPHABET_STRING
|
||||
.chars()
|
||||
.nth(total % 43)
|
||||
.ok_or(Exceptions::IndexOutOfBoundsException(None))?
|
||||
.ok_or(Exceptions::indexOutOfBoundsEmpty())?
|
||||
{
|
||||
return Err(Exceptions::NotFoundException(None));
|
||||
return Err(Exceptions::notFoundEmpty());
|
||||
}
|
||||
self.decodeRowRXingResult.truncate(max);
|
||||
}
|
||||
|
||||
if self.decodeRowRXingResult.chars().count() == 0 {
|
||||
// false positive
|
||||
return Err(Exceptions::NotFoundException(None));
|
||||
return Err(Exceptions::notFoundEmpty());
|
||||
}
|
||||
|
||||
let resultString = if self.extendedMode {
|
||||
@@ -246,7 +246,7 @@ impl Code39Reader {
|
||||
isWhite = !isWhite;
|
||||
}
|
||||
}
|
||||
Err(Exceptions::NotFoundException(None))
|
||||
Err(Exceptions::notFoundEmpty())
|
||||
}
|
||||
|
||||
// For efficiency, returns -1 on failure. Not throwing here saved as many as 700 exceptions
|
||||
@@ -306,13 +306,13 @@ impl Code39Reader {
|
||||
return Self::ALPHABET_STRING
|
||||
.chars()
|
||||
.nth(i)
|
||||
.ok_or(Exceptions::IndexOutOfBoundsException(None));
|
||||
.ok_or(Exceptions::indexOutOfBoundsEmpty());
|
||||
}
|
||||
}
|
||||
if pattern == Self::ASTERISK_ENCODING {
|
||||
return Ok('*');
|
||||
}
|
||||
Err(Exceptions::NotFoundException(None))
|
||||
Err(Exceptions::notFoundEmpty())
|
||||
}
|
||||
|
||||
fn decodeExtended(encoded: &str) -> Result<String, Exceptions> {
|
||||
@@ -325,46 +325,46 @@ impl Code39Reader {
|
||||
let c = encoded
|
||||
.chars()
|
||||
.nth(i)
|
||||
.ok_or(Exceptions::IndexOutOfBoundsException(None))?;
|
||||
.ok_or(Exceptions::indexOutOfBoundsEmpty())?;
|
||||
if c == '+' || c == '$' || c == '%' || c == '/' {
|
||||
let next = encoded
|
||||
.chars()
|
||||
.nth(i + 1)
|
||||
.ok_or(Exceptions::IndexOutOfBoundsException(None))?;
|
||||
.ok_or(Exceptions::indexOutOfBoundsEmpty())?;
|
||||
let mut decodedChar = '\0';
|
||||
match c {
|
||||
'+' => {
|
||||
// +A to +Z map to a to z
|
||||
if ('A'..='Z').contains(&next) {
|
||||
decodedChar = char::from_u32(next as u32 + 32)
|
||||
.ok_or(Exceptions::IndexOutOfBoundsException(None))?;
|
||||
.ok_or(Exceptions::indexOutOfBoundsEmpty())?;
|
||||
} else {
|
||||
return Err(Exceptions::NotFoundException(None));
|
||||
return Err(Exceptions::notFoundEmpty());
|
||||
}
|
||||
}
|
||||
'$' => {
|
||||
// $A to $Z map to control codes SH to SB
|
||||
if ('A'..='Z').contains(&next) {
|
||||
decodedChar = char::from_u32(next as u32 - 64)
|
||||
.ok_or(Exceptions::IndexOutOfBoundsException(None))?;
|
||||
.ok_or(Exceptions::indexOutOfBoundsEmpty())?;
|
||||
} else {
|
||||
return Err(Exceptions::NotFoundException(None));
|
||||
return Err(Exceptions::notFoundEmpty());
|
||||
}
|
||||
}
|
||||
'%' => {
|
||||
// %A to %E map to control codes ESC to US
|
||||
if ('A'..='E').contains(&next) {
|
||||
decodedChar = char::from_u32(next as u32 - 38)
|
||||
.ok_or(Exceptions::IndexOutOfBoundsException(None))?;
|
||||
.ok_or(Exceptions::indexOutOfBoundsEmpty())?;
|
||||
} else if ('F'..='J').contains(&next) {
|
||||
decodedChar = char::from_u32(next as u32 - 11)
|
||||
.ok_or(Exceptions::IndexOutOfBoundsException(None))?;
|
||||
.ok_or(Exceptions::indexOutOfBoundsEmpty())?;
|
||||
} else if ('K'..='O').contains(&next) {
|
||||
decodedChar = char::from_u32(next as u32 + 16)
|
||||
.ok_or(Exceptions::IndexOutOfBoundsException(None))?;
|
||||
.ok_or(Exceptions::indexOutOfBoundsEmpty())?;
|
||||
} else if ('P'..='T').contains(&next) {
|
||||
decodedChar = char::from_u32(next as u32 + 43)
|
||||
.ok_or(Exceptions::IndexOutOfBoundsException(None))?;
|
||||
.ok_or(Exceptions::indexOutOfBoundsEmpty())?;
|
||||
} else if next == 'U' {
|
||||
decodedChar = 0 as char;
|
||||
} else if next == 'V' {
|
||||
@@ -374,18 +374,18 @@ impl Code39Reader {
|
||||
} else if next == 'X' || next == 'Y' || next == 'Z' {
|
||||
decodedChar = 127 as char;
|
||||
} else {
|
||||
return Err(Exceptions::NotFoundException(None));
|
||||
return Err(Exceptions::notFoundEmpty());
|
||||
}
|
||||
}
|
||||
'/' => {
|
||||
// /A to /O map to ! to , and /Z maps to :
|
||||
if ('A'..='O').contains(&next) {
|
||||
decodedChar = char::from_u32(next as u32 - 32)
|
||||
.ok_or(Exceptions::IndexOutOfBoundsException(None))?;
|
||||
.ok_or(Exceptions::indexOutOfBoundsEmpty())?;
|
||||
} else if next == 'Z' {
|
||||
decodedChar = ':';
|
||||
} else {
|
||||
return Err(Exceptions::NotFoundException(None));
|
||||
return Err(Exceptions::notFoundEmpty());
|
||||
}
|
||||
}
|
||||
_ => {}
|
||||
|
||||
@@ -33,9 +33,9 @@ impl OneDimensionalCodeWriter for Code39Writer {
|
||||
let mut contents = contents.to_owned();
|
||||
let mut length = contents.chars().count();
|
||||
if length > 80 {
|
||||
return Err(Exceptions::IllegalArgumentException(Some(format!(
|
||||
return Err(Exceptions::illegalArgument(format!(
|
||||
"Requested contents should be less than 80 digits long, but got {length}"
|
||||
))));
|
||||
)));
|
||||
}
|
||||
|
||||
let mut i = 0;
|
||||
@@ -47,14 +47,14 @@ impl OneDimensionalCodeWriter for Code39Writer {
|
||||
contents
|
||||
.chars()
|
||||
.nth(i)
|
||||
.ok_or(Exceptions::IndexOutOfBoundsException(None))?,
|
||||
.ok_or(Exceptions::indexOutOfBoundsEmpty())?,
|
||||
)
|
||||
.is_none()
|
||||
{
|
||||
contents = Self::tryToConvertToExtendedMode(&contents)?;
|
||||
length = contents.chars().count();
|
||||
if length > 80 {
|
||||
return Err(Exceptions::IllegalArgumentException(Some(format!("Requested contents should be less than 80 digits long, but got {length} (extended full ASCII mode)"))));
|
||||
return Err(Exceptions::illegalArgument(format!("Requested contents should be less than 80 digits long, but got {length} (extended full ASCII mode)")));
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -70,7 +70,7 @@ impl OneDimensionalCodeWriter for Code39Writer {
|
||||
pos += Self::appendPattern(&mut result, pos as usize, &narrowWhite, false);
|
||||
//append next character to byte matrix
|
||||
for i in 0..length {
|
||||
let Some(indexInString) = Code39Reader::ALPHABET_STRING.find(contents.chars().nth(i).ok_or(Exceptions::IndexOutOfBoundsException(None))?) else {
|
||||
let Some(indexInString) = Code39Reader::ALPHABET_STRING.find(contents.chars().nth(i).ok_or(Exceptions::indexOutOfBoundsEmpty())?) else {
|
||||
continue;
|
||||
};
|
||||
Self::toIntArray(
|
||||
@@ -117,58 +117,58 @@ impl Code39Writer {
|
||||
extendedContent.push('$');
|
||||
extendedContent.push(
|
||||
char::from_u32('A' as u32 + (character as u32 - 1))
|
||||
.ok_or(Exceptions::ParseException(None))?,
|
||||
.ok_or(Exceptions::parseEmpty())?,
|
||||
);
|
||||
} else if character < ' ' {
|
||||
extendedContent.push('%');
|
||||
extendedContent.push(
|
||||
char::from_u32('A' as u32 + (character as u32 - 27))
|
||||
.ok_or(Exceptions::ParseException(None))?,
|
||||
.ok_or(Exceptions::parseEmpty())?,
|
||||
);
|
||||
} else if character <= ',' || character == '/' || character == ':' {
|
||||
extendedContent.push('/');
|
||||
extendedContent.push(
|
||||
char::from_u32('A' as u32 + (character as u32 - 33))
|
||||
.ok_or(Exceptions::ParseException(None))?,
|
||||
.ok_or(Exceptions::parseEmpty())?,
|
||||
);
|
||||
} else if character <= '9' {
|
||||
extendedContent.push(
|
||||
char::from_u32('0' as u32 + (character as u32 - 48))
|
||||
.ok_or(Exceptions::ParseException(None))?,
|
||||
.ok_or(Exceptions::parseEmpty())?,
|
||||
);
|
||||
} else if character <= '?' {
|
||||
extendedContent.push('%');
|
||||
extendedContent.push(
|
||||
char::from_u32('F' as u32 + (character as u32 - 59))
|
||||
.ok_or(Exceptions::ParseException(None))?,
|
||||
.ok_or(Exceptions::parseEmpty())?,
|
||||
);
|
||||
} else if character <= 'Z' {
|
||||
extendedContent.push(
|
||||
char::from_u32('A' as u32 + (character as u32 - 65))
|
||||
.ok_or(Exceptions::ParseException(None))?,
|
||||
.ok_or(Exceptions::parseEmpty())?,
|
||||
);
|
||||
} else if character <= '_' {
|
||||
extendedContent.push('%');
|
||||
extendedContent.push(
|
||||
char::from_u32('K' as u32 + (character as u32 - 91))
|
||||
.ok_or(Exceptions::ParseException(None))?,
|
||||
.ok_or(Exceptions::parseEmpty())?,
|
||||
);
|
||||
} else if character <= 'z' {
|
||||
extendedContent.push('+');
|
||||
extendedContent.push(
|
||||
char::from_u32('A' as u32 + (character as u32 - 97))
|
||||
.ok_or(Exceptions::ParseException(None))?,
|
||||
.ok_or(Exceptions::parseEmpty())?,
|
||||
);
|
||||
} else if character as u32 <= 127 {
|
||||
extendedContent.push('%');
|
||||
extendedContent.push(
|
||||
char::from_u32('P' as u32 + (character as u32 - 123))
|
||||
.ok_or(Exceptions::ParseException(None))?,
|
||||
.ok_or(Exceptions::parseEmpty())?,
|
||||
);
|
||||
} else {
|
||||
return Err(Exceptions::IllegalArgumentException(Some(format!(
|
||||
return Err(Exceptions::illegalArgument(format!(
|
||||
"Requested content contains a non-encodable character: '{character}'"
|
||||
))));
|
||||
)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -63,7 +63,7 @@ impl OneDReader for Code93Reader {
|
||||
one_d_reader::recordPattern(row, nextStart, &mut theCounters)?;
|
||||
let pattern = Self::toPattern(&theCounters);
|
||||
if pattern < 0 {
|
||||
return Err(Exceptions::NotFoundException(None));
|
||||
return Err(Exceptions::notFoundEmpty());
|
||||
}
|
||||
decodedChar = Self::patternToChar(pattern as u32)?;
|
||||
self.decodeRowRXingResult.push(decodedChar);
|
||||
@@ -92,12 +92,12 @@ impl OneDReader for Code93Reader {
|
||||
|
||||
// Should be at least one more black module
|
||||
if nextStart == end || !row.get(nextStart) {
|
||||
return Err(Exceptions::NotFoundException(None));
|
||||
return Err(Exceptions::notFoundEmpty());
|
||||
}
|
||||
|
||||
if self.decodeRowRXingResult.chars().count() < 2 {
|
||||
// false positive -- need at least 2 checksum digits
|
||||
return Err(Exceptions::NotFoundException(None));
|
||||
return Err(Exceptions::notFoundEmpty());
|
||||
}
|
||||
|
||||
Self::checkChecksums(&self.decodeRowRXingResult)?;
|
||||
@@ -191,7 +191,7 @@ impl Code93Reader {
|
||||
isWhite = !isWhite;
|
||||
}
|
||||
}
|
||||
Err(Exceptions::NotFoundException(None))
|
||||
Err(Exceptions::notFoundEmpty())
|
||||
}
|
||||
|
||||
fn toPattern(counters: &[u32; 6]) -> i32 {
|
||||
@@ -221,7 +221,7 @@ impl Code93Reader {
|
||||
return Ok(Self::ALPHABET[i]);
|
||||
}
|
||||
}
|
||||
Err(Exceptions::NotFoundException(None))
|
||||
Err(Exceptions::notFoundEmpty())
|
||||
}
|
||||
|
||||
fn decodeExtended(encoded: &str) -> Result<String, Exceptions> {
|
||||
@@ -234,52 +234,52 @@ impl Code93Reader {
|
||||
let c = encoded
|
||||
.chars()
|
||||
.nth(i)
|
||||
.ok_or(Exceptions::IndexOutOfBoundsException(None))?;
|
||||
.ok_or(Exceptions::indexOutOfBoundsEmpty())?;
|
||||
if ('a'..='d').contains(&c) {
|
||||
if i >= length - 1 {
|
||||
return Err(Exceptions::FormatException(None));
|
||||
return Err(Exceptions::formatEmpty());
|
||||
}
|
||||
let next = encoded
|
||||
.chars()
|
||||
.nth(i + 1)
|
||||
.ok_or(Exceptions::IndexOutOfBoundsException(None))?;
|
||||
.ok_or(Exceptions::indexOutOfBoundsEmpty())?;
|
||||
let mut decodedChar = '\0';
|
||||
match c {
|
||||
'd' => {
|
||||
// +A to +Z map to a to z
|
||||
if ('A'..='Z').contains(&next) {
|
||||
decodedChar = char::from_u32(next as u32 + 32)
|
||||
.ok_or(Exceptions::ParseException(None))?;
|
||||
decodedChar =
|
||||
char::from_u32(next as u32 + 32).ok_or(Exceptions::parseEmpty())?;
|
||||
} else {
|
||||
return Err(Exceptions::FormatException(None));
|
||||
return Err(Exceptions::formatEmpty());
|
||||
}
|
||||
}
|
||||
'a' => {
|
||||
// $A to $Z map to control codes SH to SB
|
||||
if ('A'..='Z').contains(&next) {
|
||||
decodedChar = char::from_u32(next as u32 - 64)
|
||||
.ok_or(Exceptions::ParseException(None))?;
|
||||
decodedChar =
|
||||
char::from_u32(next as u32 - 64).ok_or(Exceptions::parseEmpty())?;
|
||||
} else {
|
||||
return Err(Exceptions::FormatException(None));
|
||||
return Err(Exceptions::formatEmpty());
|
||||
}
|
||||
}
|
||||
'b' => {
|
||||
if ('A'..='E').contains(&next) {
|
||||
// %A to %E map to control codes ESC to USep
|
||||
decodedChar = char::from_u32(next as u32 - 38)
|
||||
.ok_or(Exceptions::ParseException(None))?;
|
||||
decodedChar =
|
||||
char::from_u32(next as u32 - 38).ok_or(Exceptions::parseEmpty())?;
|
||||
} else if ('F'..='J').contains(&next) {
|
||||
// %F to %J map to ; < = > ?
|
||||
decodedChar = char::from_u32(next as u32 - 11)
|
||||
.ok_or(Exceptions::ParseException(None))?;
|
||||
decodedChar =
|
||||
char::from_u32(next as u32 - 11).ok_or(Exceptions::parseEmpty())?;
|
||||
} else if ('K'..='O').contains(&next) {
|
||||
// %K to %O map to [ \ ] ^ _
|
||||
decodedChar = char::from_u32(next as u32 + 16)
|
||||
.ok_or(Exceptions::ParseException(None))?;
|
||||
decodedChar =
|
||||
char::from_u32(next as u32 + 16).ok_or(Exceptions::parseEmpty())?;
|
||||
} else if ('P'..='T').contains(&next) {
|
||||
// %P to %T map to { | } ~ DEL
|
||||
decodedChar = char::from_u32(next as u32 + 43)
|
||||
.ok_or(Exceptions::ParseException(None))?;
|
||||
decodedChar =
|
||||
char::from_u32(next as u32 + 43).ok_or(Exceptions::parseEmpty())?;
|
||||
} else if next == 'U' {
|
||||
// %U map to NUL
|
||||
decodedChar = '\0';
|
||||
@@ -293,18 +293,18 @@ impl Code93Reader {
|
||||
// %X to %Z all map to DEL (127)
|
||||
decodedChar = 127 as char;
|
||||
} else {
|
||||
return Err(Exceptions::FormatException(None));
|
||||
return Err(Exceptions::formatEmpty());
|
||||
}
|
||||
}
|
||||
'c' => {
|
||||
// /A to /O map to ! to , and /Z maps to :
|
||||
if ('A'..='O').contains(&next) {
|
||||
decodedChar = char::from_u32(next as u32 - 32)
|
||||
.ok_or(Exceptions::ParseException(None))?;
|
||||
decodedChar =
|
||||
char::from_u32(next as u32 - 32).ok_or(Exceptions::parseEmpty())?;
|
||||
} else if next == 'Z' {
|
||||
decodedChar = ':';
|
||||
} else {
|
||||
return Err(Exceptions::FormatException(None));
|
||||
return Err(Exceptions::formatEmpty());
|
||||
}
|
||||
}
|
||||
_ => {}
|
||||
@@ -342,7 +342,7 @@ impl Code93Reader {
|
||||
result
|
||||
.chars()
|
||||
.nth(i)
|
||||
.ok_or(Exceptions::IndexOutOfBoundsException(None))?,
|
||||
.ok_or(Exceptions::indexOutOfBoundsEmpty())?,
|
||||
)
|
||||
.map_or_else(|| -1_i32, |v| v as i32);
|
||||
weight += 1;
|
||||
@@ -353,10 +353,10 @@ impl Code93Reader {
|
||||
if result
|
||||
.chars()
|
||||
.nth(checkPosition)
|
||||
.ok_or(Exceptions::IndexOutOfBoundsException(None))?
|
||||
.ok_or(Exceptions::indexOutOfBoundsEmpty())?
|
||||
!= Self::ALPHABET[(total as usize) % 47]
|
||||
{
|
||||
Err(Exceptions::ChecksumException(None))
|
||||
Err(Exceptions::checksumEmpty())
|
||||
} else {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@@ -35,7 +35,7 @@ impl OneDimensionalCodeWriter for Code93Writer {
|
||||
let mut contents = Self::convertToExtended(contents)?;
|
||||
let length = contents.chars().count();
|
||||
if length > 80 {
|
||||
return Err(Exceptions::IllegalArgumentException(Some(format!("Requested contents should be less than 80 digits long after converting to extended encoding, but got {length}" ))));
|
||||
return Err(Exceptions::illegalArgument(format!("Requested contents should be less than 80 digits long after converting to extended encoding, but got {length}" )));
|
||||
}
|
||||
|
||||
//length of code + 2 start/stop characters + 2 checksums, each of 9 bits, plus a termination bar
|
||||
@@ -48,7 +48,7 @@ impl OneDimensionalCodeWriter for Code93Writer {
|
||||
|
||||
for i in 0..length {
|
||||
// for (int i = 0; i < length; i++) {
|
||||
let Some(indexInString) = Code93Reader::ALPHABET_STRING.find(contents.chars().nth(i).ok_or(Exceptions::IndexOutOfBoundsException(None))?) else {panic!("alphabet")};
|
||||
let Some(indexInString) = Code93Reader::ALPHABET_STRING.find(contents.chars().nth(i).ok_or(Exceptions::indexOutOfBoundsEmpty())?) else {panic!("alphabet")};
|
||||
pos += Self::appendPattern(
|
||||
&mut result,
|
||||
pos,
|
||||
@@ -65,7 +65,7 @@ impl OneDimensionalCodeWriter for Code93Writer {
|
||||
Code93Reader::ALPHABET_STRING
|
||||
.chars()
|
||||
.nth(check1)
|
||||
.ok_or(Exceptions::IndexOutOfBoundsException(None))?,
|
||||
.ok_or(Exceptions::indexOutOfBoundsEmpty())?,
|
||||
);
|
||||
|
||||
let check2 = Self::computeChecksumIndex(&contents, 15);
|
||||
@@ -157,14 +157,14 @@ impl Code93Writer {
|
||||
extendedContent.push('a');
|
||||
extendedContent.push(
|
||||
char::from_u32('A' as u32 + character as u32 - 1)
|
||||
.ok_or(Exceptions::ParseException(None))?,
|
||||
.ok_or(Exceptions::parseEmpty())?,
|
||||
);
|
||||
} else if character as u32 <= 31 {
|
||||
// ESC - US: (%)A - (%)E
|
||||
extendedContent.push('b');
|
||||
extendedContent.push(
|
||||
char::from_u32('A' as u32 + character as u32 - 27)
|
||||
.ok_or(Exceptions::ParseException(None))?,
|
||||
.ok_or(Exceptions::parseEmpty())?,
|
||||
);
|
||||
} else if character == ' ' || character == '$' || character == '%' || character == '+' {
|
||||
// space $ % +
|
||||
@@ -174,7 +174,7 @@ impl Code93Writer {
|
||||
extendedContent.push('c');
|
||||
extendedContent.push(
|
||||
char::from_u32('A' as u32 + character as u32 - '!' as u32)
|
||||
.ok_or(Exceptions::ParseException(None))?,
|
||||
.ok_or(Exceptions::parseEmpty())?,
|
||||
);
|
||||
} else if character <= '9' {
|
||||
extendedContent.push(character);
|
||||
@@ -186,7 +186,7 @@ impl Code93Writer {
|
||||
extendedContent.push('b');
|
||||
extendedContent.push(
|
||||
char::from_u32('F' as u32 + character as u32 - ';' as u32)
|
||||
.ok_or(Exceptions::ParseException(None))?,
|
||||
.ok_or(Exceptions::parseEmpty())?,
|
||||
);
|
||||
} else if character == '@' {
|
||||
// @: (%)V
|
||||
@@ -199,7 +199,7 @@ impl Code93Writer {
|
||||
extendedContent.push('b');
|
||||
extendedContent.push(
|
||||
char::from_u32('K' as u32 + character as u32 - '[' as u32)
|
||||
.ok_or(Exceptions::ParseException(None))?,
|
||||
.ok_or(Exceptions::parseEmpty())?,
|
||||
);
|
||||
} else if character == '`' {
|
||||
// `: (%)W
|
||||
@@ -209,19 +209,19 @@ impl Code93Writer {
|
||||
extendedContent.push('d');
|
||||
extendedContent.push(
|
||||
char::from_u32('A' as u32 + character as u32 - 'a' as u32)
|
||||
.ok_or(Exceptions::ParseException(None))?,
|
||||
.ok_or(Exceptions::parseEmpty())?,
|
||||
);
|
||||
} else if character as u32 <= 127 {
|
||||
// { - DEL: (%)P - (%)T
|
||||
extendedContent.push('b');
|
||||
extendedContent.push(
|
||||
char::from_u32('P' as u32 + character as u32 - '{' as u32)
|
||||
.ok_or(Exceptions::ParseException(None))?,
|
||||
.ok_or(Exceptions::parseEmpty())?,
|
||||
);
|
||||
} else {
|
||||
return Err(Exceptions::IllegalArgumentException(Some(format!(
|
||||
return Err(Exceptions::illegalArgument(format!(
|
||||
"Requested content contains a non-encodable character: '{character}'"
|
||||
))));
|
||||
)));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -66,7 +66,7 @@ impl UPCEANReader for EAN13Reader {
|
||||
)?;
|
||||
resultString.push(
|
||||
char::from_u32('0' as u32 + bestMatch as u32 % 10)
|
||||
.ok_or(Exceptions::ParseException(None))?,
|
||||
.ok_or(Exceptions::parseEmpty())?,
|
||||
);
|
||||
|
||||
rowOffset += counters.iter().sum::<u32>() as usize;
|
||||
@@ -90,8 +90,7 @@ impl UPCEANReader for EAN13Reader {
|
||||
let bestMatch =
|
||||
self.decodeDigit(row, &mut counters, rowOffset, &upc_ean_reader::L_PATTERNS)?;
|
||||
resultString.push(
|
||||
char::from_u32('0' as u32 + bestMatch as u32)
|
||||
.ok_or(Exceptions::ParseException(None))?,
|
||||
char::from_u32('0' as u32 + bestMatch as u32).ok_or(Exceptions::parseEmpty())?,
|
||||
);
|
||||
|
||||
rowOffset += counters.iter().sum::<u32>() as usize;
|
||||
@@ -154,12 +153,11 @@ impl EAN13Reader {
|
||||
if lgPatternFound == Self::FIRST_DIGIT_ENCODINGS[d] {
|
||||
resultString.insert(
|
||||
0,
|
||||
char::from_u32('0' as u32 + d as u32)
|
||||
.ok_or(Exceptions::ParseException(None))?,
|
||||
char::from_u32('0' as u32 + d as u32).ok_or(Exceptions::parseEmpty())?,
|
||||
);
|
||||
return Ok(());
|
||||
}
|
||||
}
|
||||
Err(Exceptions::NotFoundException(None))
|
||||
Err(Exceptions::notFoundEmpty())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -45,15 +45,15 @@ impl OneDimensionalCodeWriter for EAN13Writer {
|
||||
}
|
||||
13 => {
|
||||
if !reader.checkStandardUPCEANChecksum(&contents)? {
|
||||
return Err(Exceptions::IllegalArgumentException(Some(
|
||||
return Err(Exceptions::illegalArgument(
|
||||
"Contents do not pass checksum".to_owned(),
|
||||
)));
|
||||
));
|
||||
}
|
||||
}
|
||||
_ => {
|
||||
return Err(Exceptions::IllegalArgumentException(Some(format!(
|
||||
return Err(Exceptions::illegalArgument(format!(
|
||||
"Requested contents should be 12 or 13 digits long, but got {length}"
|
||||
))))
|
||||
)))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -62,9 +62,9 @@ impl OneDimensionalCodeWriter for EAN13Writer {
|
||||
let firstDigit = contents
|
||||
.chars()
|
||||
.next()
|
||||
.ok_or(Exceptions::IndexOutOfBoundsException(None))?
|
||||
.ok_or(Exceptions::indexOutOfBoundsEmpty())?
|
||||
.to_digit(10)
|
||||
.ok_or(Exceptions::ParseException(None))? as usize;
|
||||
.ok_or(Exceptions::parseEmpty())? as usize;
|
||||
let parities = EAN13Reader::FIRST_DIGIT_ENCODINGS[firstDigit];
|
||||
let mut result = [false; CODE_WIDTH];
|
||||
let mut pos = 0;
|
||||
@@ -79,9 +79,9 @@ impl OneDimensionalCodeWriter for EAN13Writer {
|
||||
let mut digit = contents
|
||||
.chars()
|
||||
.nth(i)
|
||||
.ok_or(Exceptions::IndexOutOfBoundsException(None))?
|
||||
.ok_or(Exceptions::indexOutOfBoundsEmpty())?
|
||||
.to_digit(10)
|
||||
.ok_or(Exceptions::ParseException(None))? as usize;
|
||||
.ok_or(Exceptions::parseEmpty())? as usize;
|
||||
if (parities >> (6 - i) & 1) == 1 {
|
||||
digit += 10;
|
||||
}
|
||||
@@ -100,9 +100,9 @@ impl OneDimensionalCodeWriter for EAN13Writer {
|
||||
let digit = contents
|
||||
.chars()
|
||||
.nth(i)
|
||||
.ok_or(Exceptions::IndexOutOfBoundsException(None))?
|
||||
.ok_or(Exceptions::indexOutOfBoundsEmpty())?
|
||||
.to_digit(10)
|
||||
.ok_or(Exceptions::ParseException(None))? as usize;
|
||||
.ok_or(Exceptions::parseEmpty())? as usize;
|
||||
|
||||
pos += EAN13Writer::appendPattern(
|
||||
&mut result,
|
||||
|
||||
@@ -53,8 +53,7 @@ impl UPCEANReader for EAN8Reader {
|
||||
let bestMatch =
|
||||
self.decodeDigit(row, &mut counters, rowOffset, &upc_ean_reader::L_PATTERNS)?;
|
||||
resultString.push(
|
||||
char::from_u32('0' as u32 + bestMatch as u32)
|
||||
.ok_or(Exceptions::ParseException(None))?,
|
||||
char::from_u32('0' as u32 + bestMatch as u32).ok_or(Exceptions::parseEmpty())?,
|
||||
);
|
||||
|
||||
rowOffset += counters.iter().sum::<u32>() as usize;
|
||||
@@ -71,8 +70,7 @@ impl UPCEANReader for EAN8Reader {
|
||||
let bestMatch =
|
||||
self.decodeDigit(row, &mut counters, rowOffset, &upc_ean_reader::L_PATTERNS)?;
|
||||
resultString.push(
|
||||
char::from_u32('0' as u32 + bestMatch as u32)
|
||||
.ok_or(Exceptions::ParseException(None))?,
|
||||
char::from_u32('0' as u32 + bestMatch as u32).ok_or(Exceptions::parseEmpty())?,
|
||||
);
|
||||
|
||||
rowOffset += counters.iter().sum::<u32>() as usize;
|
||||
|
||||
@@ -55,15 +55,15 @@ impl OneDimensionalCodeWriter for EAN8Writer {
|
||||
}
|
||||
8 => {
|
||||
if !EAN8Reader.checkStandardUPCEANChecksum(&contents)? {
|
||||
return Err(Exceptions::IllegalArgumentException(Some(
|
||||
return Err(Exceptions::illegalArgument(
|
||||
"Contents do not pass checksum".to_owned(),
|
||||
)));
|
||||
));
|
||||
}
|
||||
}
|
||||
_ => {
|
||||
return Err(Exceptions::IllegalArgumentException(Some(format!(
|
||||
return Err(Exceptions::illegalArgument(format!(
|
||||
"Requested contents should be 7 or 8 digits long, but got {length}"
|
||||
))))
|
||||
)))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -80,10 +80,9 @@ impl OneDimensionalCodeWriter for EAN8Writer {
|
||||
let digit = contents
|
||||
.chars()
|
||||
.nth(i)
|
||||
.ok_or(Exceptions::IndexOutOfBoundsException(None))?
|
||||
.ok_or(Exceptions::indexOutOfBoundsEmpty())?
|
||||
.to_digit(10)
|
||||
.ok_or(Exceptions::IndexOutOfBoundsException(None))?
|
||||
as usize;
|
||||
.ok_or(Exceptions::indexOutOfBoundsEmpty())? as usize;
|
||||
pos += Self::appendPattern(&mut result, pos, &upc_ean_reader::L_PATTERNS[digit], false)
|
||||
as usize;
|
||||
}
|
||||
@@ -96,10 +95,9 @@ impl OneDimensionalCodeWriter for EAN8Writer {
|
||||
let digit = contents
|
||||
.chars()
|
||||
.nth(i)
|
||||
.ok_or(Exceptions::IndexOutOfBoundsException(None))?
|
||||
.ok_or(Exceptions::indexOutOfBoundsEmpty())?
|
||||
.to_digit(10)
|
||||
.ok_or(Exceptions::IndexOutOfBoundsException(None))?
|
||||
as usize;
|
||||
.ok_or(Exceptions::indexOutOfBoundsEmpty())? as usize;
|
||||
pos += Self::appendPattern(&mut result, pos, &upc_ean_reader::L_PATTERNS[digit], true)
|
||||
as usize;
|
||||
}
|
||||
|
||||
@@ -140,7 +140,7 @@ impl OneDReader for ITFReader {
|
||||
lengthOK = true;
|
||||
}
|
||||
if !lengthOK {
|
||||
return Err(Exceptions::FormatException(None));
|
||||
return Err(Exceptions::formatEmpty());
|
||||
}
|
||||
|
||||
let mut resultObject = RXingResult::new(
|
||||
@@ -195,13 +195,11 @@ impl ITFReader {
|
||||
}
|
||||
|
||||
let mut bestMatch = self.decodeDigit(&counterBlack)?;
|
||||
resultString.push(
|
||||
char::from_u32('0' as u32 + bestMatch).ok_or(Exceptions::ParseException(None))?,
|
||||
);
|
||||
resultString
|
||||
.push(char::from_u32('0' as u32 + bestMatch).ok_or(Exceptions::parseEmpty())?);
|
||||
bestMatch = self.decodeDigit(&counterWhite)?;
|
||||
resultString.push(
|
||||
char::from_u32('0' as u32 + bestMatch).ok_or(Exceptions::ParseException(None))?,
|
||||
);
|
||||
resultString
|
||||
.push(char::from_u32('0' as u32 + bestMatch).ok_or(Exceptions::parseEmpty())?);
|
||||
|
||||
payloadStart += counterDigitPair.iter().sum::<u32>() as usize;
|
||||
}
|
||||
@@ -262,7 +260,7 @@ impl ITFReader {
|
||||
|
||||
if quietCount != 0 {
|
||||
// Unable to find the necessary number of quiet zone pixels.
|
||||
Err(Exceptions::NotFoundException(None))
|
||||
Err(Exceptions::notFoundEmpty())
|
||||
} else {
|
||||
Ok(())
|
||||
}
|
||||
@@ -279,7 +277,7 @@ impl ITFReader {
|
||||
let width = row.getSize();
|
||||
let endStart = row.getNextSet(0);
|
||||
if endStart == width {
|
||||
return Err(Exceptions::NotFoundException(None));
|
||||
return Err(Exceptions::notFoundEmpty());
|
||||
}
|
||||
|
||||
Ok(endStart)
|
||||
@@ -374,7 +372,7 @@ impl ITFReader {
|
||||
isWhite = !isWhite;
|
||||
}
|
||||
}
|
||||
Err(Exceptions::NotFoundException(None))
|
||||
Err(Exceptions::notFoundEmpty())
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -403,7 +401,7 @@ impl ITFReader {
|
||||
if bestMatch >= 0 {
|
||||
Ok(bestMatch as u32 % 10)
|
||||
} else {
|
||||
Err(Exceptions::NotFoundException(None))
|
||||
Err(Exceptions::notFoundEmpty())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,14 +32,14 @@ impl OneDimensionalCodeWriter for ITFWriter {
|
||||
fn encode_oned(&self, contents: &str) -> Result<Vec<bool>, Exceptions> {
|
||||
let length = contents.chars().count();
|
||||
if length % 2 != 0 {
|
||||
return Err(Exceptions::IllegalArgumentException(Some(
|
||||
return Err(Exceptions::illegalArgument(
|
||||
"The length of the input should be even".to_owned(),
|
||||
)));
|
||||
));
|
||||
}
|
||||
if length > 80 {
|
||||
return Err(Exceptions::IllegalArgumentException(Some(format!(
|
||||
return Err(Exceptions::illegalArgument(format!(
|
||||
"Requested contents should be less than 80 digits long, but got {length}"
|
||||
))));
|
||||
)));
|
||||
}
|
||||
|
||||
Self::checkNumeric(contents)?;
|
||||
@@ -51,15 +51,15 @@ impl OneDimensionalCodeWriter for ITFWriter {
|
||||
let one = contents
|
||||
.chars()
|
||||
.nth(i)
|
||||
.ok_or(Exceptions::IndexOutOfBoundsException(None))?
|
||||
.ok_or(Exceptions::indexOutOfBoundsEmpty())?
|
||||
.to_digit(10)
|
||||
.ok_or(Exceptions::ParseException(None))? as usize;
|
||||
.ok_or(Exceptions::parseEmpty())? as usize;
|
||||
let two = contents
|
||||
.chars()
|
||||
.nth(i + 1)
|
||||
.ok_or(Exceptions::IndexOutOfBoundsException(None))?
|
||||
.ok_or(Exceptions::indexOutOfBoundsEmpty())?
|
||||
.to_digit(10)
|
||||
.ok_or(Exceptions::ParseException(None))? as usize;
|
||||
.ok_or(Exceptions::parseEmpty())? as usize;
|
||||
let mut encoding = [0; 10];
|
||||
for j in 0..5 {
|
||||
encoding[2 * j] = PATTERNS[one][j];
|
||||
|
||||
@@ -46,7 +46,7 @@ impl OneDReader for MultiFormatOneDReader {
|
||||
}
|
||||
}
|
||||
|
||||
Err(Exceptions::NotFoundException(None))
|
||||
Err(Exceptions::notFoundEmpty())
|
||||
}
|
||||
}
|
||||
impl MultiFormatOneDReader {
|
||||
@@ -168,7 +168,7 @@ impl Reader for MultiFormatOneDReader {
|
||||
|
||||
Ok(result)
|
||||
} else {
|
||||
Err(Exceptions::NotFoundException(None))
|
||||
Err(Exceptions::notFoundEmpty())
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -134,7 +134,7 @@ impl OneDReader for MultiFormatUPCEANReader {
|
||||
}
|
||||
}
|
||||
|
||||
Err(Exceptions::NotFoundException(None))
|
||||
Err(Exceptions::notFoundEmpty())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -200,7 +200,7 @@ impl Reader for MultiFormatUPCEANReader {
|
||||
|
||||
Ok(result)
|
||||
} else {
|
||||
Err(Exceptions::NotFoundException(None))
|
||||
Err(Exceptions::notFoundEmpty())
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -100,9 +100,9 @@ pub trait OneDimensionalCodeWriter: Writer {
|
||||
*/
|
||||
fn checkNumeric(contents: &str) -> Result<(), Exceptions> {
|
||||
if !NUMERIC.is_match(contents) {
|
||||
Err(Exceptions::IllegalArgumentException(Some(
|
||||
Err(Exceptions::illegalArgument(
|
||||
"Input should only contain digits 0-9".to_owned(),
|
||||
)))
|
||||
))
|
||||
} else {
|
||||
Ok(())
|
||||
}
|
||||
@@ -163,29 +163,29 @@ impl Writer for L {
|
||||
hints: &crate::EncodingHintDictionary,
|
||||
) -> Result<crate::common::BitMatrix, crate::Exceptions> {
|
||||
if contents.is_empty() {
|
||||
return Err(Exceptions::IllegalArgumentException(Some(
|
||||
return Err(Exceptions::illegalArgument(
|
||||
"Found empty contents".to_owned(),
|
||||
)));
|
||||
));
|
||||
}
|
||||
|
||||
if width < 0 || height < 0 {
|
||||
return Err(Exceptions::IllegalArgumentException(Some(format!(
|
||||
return Err(Exceptions::illegalArgument(format!(
|
||||
"Negative size is not allowed. Input: {width}x{height}"
|
||||
))));
|
||||
)));
|
||||
}
|
||||
if let Some(supportedFormats) = self.getSupportedWriteFormats() {
|
||||
if !supportedFormats.contains(format) {
|
||||
return Err(Exceptions::IllegalArgumentException(Some(format!(
|
||||
return Err(Exceptions::illegalArgument(format!(
|
||||
"Can only encode {supportedFormats:?}, but got {format:?}"
|
||||
))));
|
||||
)));
|
||||
}
|
||||
}
|
||||
|
||||
let mut sidesMargin = self.getDefaultMargin();
|
||||
if let Some(EncodeHintValue::Margin(margin)) = hints.get(&EncodeHintType::MARGIN) {
|
||||
sidesMargin = margin.parse::<u32>().map_err(|e| {
|
||||
Exceptions::IllegalArgumentException(Some(format!("couldnt parse {margin}: {e}")))
|
||||
})?;
|
||||
sidesMargin = margin
|
||||
.parse::<u32>()
|
||||
.map_err(|e| Exceptions::illegalArgument(format!("couldnt parse {margin}: {e}")))?;
|
||||
}
|
||||
|
||||
let code = self.encode_oned_with_hints(contents, hints)?;
|
||||
|
||||
@@ -131,7 +131,7 @@ pub trait OneDReader: Reader {
|
||||
}
|
||||
}
|
||||
|
||||
Err(Exceptions::NotFoundException(None))
|
||||
Err(Exceptions::notFoundEmpty())
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -218,7 +218,7 @@ pub fn recordPattern(row: &BitArray, start: usize, counters: &mut [u32]) -> Resu
|
||||
|
||||
let end = row.getSize();
|
||||
if start >= end {
|
||||
return Err(Exceptions::NotFoundException(None));
|
||||
return Err(Exceptions::notFoundEmpty());
|
||||
}
|
||||
|
||||
let mut isWhite = !row.get(start);
|
||||
@@ -241,7 +241,7 @@ pub fn recordPattern(row: &BitArray, start: usize, counters: &mut [u32]) -> Resu
|
||||
// If we read fully the last section of pixels and filled up our counters -- or filled
|
||||
// the last counter but ran off the side of the image, OK. Otherwise, a problem.
|
||||
if !(counterPosition == numCounters || (counterPosition == numCounters - 1 && i == end)) {
|
||||
return Err(Exceptions::NotFoundException(None));
|
||||
return Err(Exceptions::notFoundEmpty());
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
@@ -263,7 +263,7 @@ pub fn recordPatternInReverse(
|
||||
}
|
||||
}
|
||||
if numTransitionsLeft >= 0 {
|
||||
return Err(Exceptions::NotFoundException(None));
|
||||
return Err(Exceptions::notFoundEmpty());
|
||||
}
|
||||
recordPattern(row, start + 1, counters)?;
|
||||
|
||||
|
||||
@@ -38,7 +38,7 @@ pub trait AbstractRSSReaderTrait: OneDReader {
|
||||
return Ok(value as u32);
|
||||
}
|
||||
}
|
||||
Err(Exceptions::NotFoundException(None))
|
||||
Err(Exceptions::notFoundEmpty())
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -50,23 +50,13 @@ pub fn buildBitArrayFromString(data: &str) -> Result<BitArray, Exceptions> {
|
||||
// for (int i = 0; i < dotsAndXs.length(); ++i) {
|
||||
if i % 9 == 0 {
|
||||
// spaces
|
||||
if dotsAndXs
|
||||
.chars()
|
||||
.nth(i)
|
||||
.ok_or(Exceptions::ParseException(None))?
|
||||
!= ' '
|
||||
{
|
||||
return Err(Exceptions::IllegalStateException(Some(
|
||||
"space expected".to_owned(),
|
||||
)));
|
||||
if dotsAndXs.chars().nth(i).ok_or(Exceptions::parseEmpty())? != ' ' {
|
||||
return Err(Exceptions::illegalState("space expected".to_owned()));
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
let currentChar = dotsAndXs
|
||||
.chars()
|
||||
.nth(i)
|
||||
.ok_or(Exceptions::ParseException(None))?;
|
||||
let currentChar = dotsAndXs.chars().nth(i).ok_or(Exceptions::parseEmpty())?;
|
||||
if currentChar == 'X' || currentChar == 'x' {
|
||||
binary.set(counter);
|
||||
}
|
||||
@@ -92,7 +82,7 @@ pub fn buildBitArrayFromStringWithoutSpaces(data: &str) -> Result<BitArray, Exce
|
||||
dotsAndXs
|
||||
.chars()
|
||||
.nth(current)
|
||||
.ok_or(Exceptions::ParseException(None))?,
|
||||
.ok_or(Exceptions::parseEmpty())?,
|
||||
);
|
||||
current += 1;
|
||||
|
||||
|
||||
@@ -149,7 +149,7 @@ pub fn createDecoder<'a>(
|
||||
_ => {}
|
||||
}
|
||||
|
||||
Err(Exceptions::IllegalStateException(Some(format!(
|
||||
Err(Exceptions::illegalState(format!(
|
||||
"unknown decoder: {information}"
|
||||
))))
|
||||
)))
|
||||
}
|
||||
|
||||
@@ -39,7 +39,7 @@ impl AI01decoder for AI01392xDecoder<'_> {}
|
||||
impl AbstractExpandedDecoder for AI01392xDecoder<'_> {
|
||||
fn parseInformation(&mut self) -> Result<String, crate::Exceptions> {
|
||||
if self.information.getSize() < Self::HEADER_SIZE + Self::GTIN_SIZE as usize {
|
||||
return Err(crate::Exceptions::NotFoundException(None));
|
||||
return Err(crate::Exceptions::notFoundEmpty());
|
||||
}
|
||||
|
||||
let mut buf = String::new();
|
||||
|
||||
@@ -39,7 +39,7 @@ impl AI01decoder for AI01393xDecoder<'_> {}
|
||||
impl AbstractExpandedDecoder for AI01393xDecoder<'_> {
|
||||
fn parseInformation(&mut self) -> Result<String, crate::Exceptions> {
|
||||
if self.information.getSize() < Self::HEADER_SIZE + Self::GTIN_SIZE as usize {
|
||||
return Err(crate::Exceptions::NotFoundException(None));
|
||||
return Err(crate::Exceptions::notFoundEmpty());
|
||||
}
|
||||
|
||||
let mut buf = String::new();
|
||||
|
||||
@@ -57,7 +57,7 @@ impl AbstractExpandedDecoder for AI013x0x1xDecoder<'_> {
|
||||
if self.information.getSize()
|
||||
!= Self::HEADER_SIZE + Self::GTIN_SIZE as usize + Self::WEIGHT_SIZE + Self::DATE_SIZE
|
||||
{
|
||||
return Err(crate::Exceptions::NotFoundException(None));
|
||||
return Err(crate::Exceptions::notFoundEmpty());
|
||||
}
|
||||
|
||||
let mut buf = String::new();
|
||||
|
||||
@@ -53,7 +53,7 @@ impl AbstractExpandedDecoder for AI013x0xDecoder<'_> {
|
||||
if self.information.getSize()
|
||||
!= Self::HEADER_SIZE + Self::GTIN_SIZE as usize + Self::WEIGHT_SIZE
|
||||
{
|
||||
return Err(crate::Exceptions::NotFoundException(None));
|
||||
return Err(crate::Exceptions::notFoundEmpty());
|
||||
}
|
||||
|
||||
let mut buf = String::new();
|
||||
|
||||
@@ -51,7 +51,7 @@ impl DecodedNumeric {
|
||||
if
|
||||
/*firstDigit < 0 ||*/
|
||||
firstDigit > 10 || /*secondDigit < 0 ||*/ secondDigit > 10 {
|
||||
return Err(Exceptions::FormatException(None));
|
||||
return Err(Exceptions::formatEmpty());
|
||||
}
|
||||
|
||||
Ok(Self {
|
||||
|
||||
@@ -145,7 +145,7 @@ pub fn parseFieldsInGeneralPurpose(rawInformation: &str) -> Result<String, Excep
|
||||
// Processing 2-digit AIs
|
||||
|
||||
if rawInformation.chars().count() < 2 {
|
||||
return Err(Exceptions::NotFoundException(None));
|
||||
return Err(Exceptions::notFoundEmpty());
|
||||
}
|
||||
|
||||
let lookup: String = rawInformation.chars().take(2).collect();
|
||||
@@ -158,7 +158,7 @@ pub fn parseFieldsInGeneralPurpose(rawInformation: &str) -> Result<String, Excep
|
||||
}
|
||||
|
||||
if rawInformation.chars().count() < 3 {
|
||||
return Err(Exceptions::NotFoundException(None));
|
||||
return Err(Exceptions::notFoundEmpty());
|
||||
}
|
||||
|
||||
let firstThreeDigits: String = rawInformation.chars().take(3).collect();
|
||||
@@ -171,7 +171,7 @@ pub fn parseFieldsInGeneralPurpose(rawInformation: &str) -> Result<String, Excep
|
||||
}
|
||||
|
||||
if rawInformation.chars().count() < 4 {
|
||||
return Err(Exceptions::NotFoundException(None));
|
||||
return Err(Exceptions::notFoundEmpty());
|
||||
}
|
||||
|
||||
let threeDigitPlusDigitDataLength = THREE_DIGIT_PLUS_DIGIT_DATA_LENGTH.get(&firstThreeDigits);
|
||||
@@ -191,7 +191,7 @@ pub fn parseFieldsInGeneralPurpose(rawInformation: &str) -> Result<String, Excep
|
||||
return processFixedAI(4, ffdl.length, rawInformation);
|
||||
}
|
||||
|
||||
Err(Exceptions::NotFoundException(None))
|
||||
Err(Exceptions::notFoundEmpty())
|
||||
}
|
||||
|
||||
fn processFixedAI(
|
||||
@@ -200,13 +200,13 @@ fn processFixedAI(
|
||||
rawInformation: &str,
|
||||
) -> Result<String, Exceptions> {
|
||||
if rawInformation.chars().count() < aiSize {
|
||||
return Err(Exceptions::NotFoundException(None));
|
||||
return Err(Exceptions::notFoundEmpty());
|
||||
}
|
||||
|
||||
let ai: String = rawInformation.chars().take(aiSize).collect();
|
||||
|
||||
if rawInformation.chars().count() < aiSize + fieldSize {
|
||||
return Err(Exceptions::NotFoundException(None));
|
||||
return Err(Exceptions::notFoundEmpty());
|
||||
}
|
||||
|
||||
let field: String = rawInformation
|
||||
|
||||
@@ -199,7 +199,7 @@ impl<'a> GeneralAppIdDecoder<'_> {
|
||||
if let Some(r) = result.getDecodedInformation() {
|
||||
Ok(r.clone())
|
||||
} else {
|
||||
Err(Exceptions::NotFoundException(None))
|
||||
Err(Exceptions::notFoundEmpty())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -345,8 +345,7 @@ impl<'a> GeneralAppIdDecoder<'_> {
|
||||
if (5..15).contains(&fiveBitValue) {
|
||||
return Ok(DecodedChar::new(
|
||||
pos + 5,
|
||||
char::from_u32('0' as u32 + fiveBitValue - 5)
|
||||
.ok_or(Exceptions::ParseException(None))?,
|
||||
char::from_u32('0' as u32 + fiveBitValue - 5).ok_or(Exceptions::parseEmpty())?,
|
||||
));
|
||||
}
|
||||
|
||||
@@ -355,14 +354,14 @@ impl<'a> GeneralAppIdDecoder<'_> {
|
||||
if (64..90).contains(&sevenBitValue) {
|
||||
return Ok(DecodedChar::new(
|
||||
pos + 7,
|
||||
char::from_u32(sevenBitValue + 1).ok_or(Exceptions::ParseException(None))?,
|
||||
char::from_u32(sevenBitValue + 1).ok_or(Exceptions::parseEmpty())?,
|
||||
));
|
||||
}
|
||||
|
||||
if (90..116).contains(&sevenBitValue) {
|
||||
return Ok(DecodedChar::new(
|
||||
pos + 7,
|
||||
char::from_u32(sevenBitValue + 7).ok_or(Exceptions::ParseException(None))?,
|
||||
char::from_u32(sevenBitValue + 7).ok_or(Exceptions::parseEmpty())?,
|
||||
));
|
||||
}
|
||||
|
||||
@@ -389,7 +388,7 @@ impl<'a> GeneralAppIdDecoder<'_> {
|
||||
250 => '?',
|
||||
251 => '_',
|
||||
252 => ' ',
|
||||
_ => return Err(Exceptions::FormatException(None)),
|
||||
_ => return Err(Exceptions::formatEmpty()),
|
||||
};
|
||||
|
||||
Ok(DecodedChar::new(pos + 8, c))
|
||||
@@ -424,8 +423,7 @@ impl<'a> GeneralAppIdDecoder<'_> {
|
||||
if (5..15).contains(&fiveBitValue) {
|
||||
return Ok(DecodedChar::new(
|
||||
pos + 5,
|
||||
char::from_u32('0' as u32 + fiveBitValue - 5)
|
||||
.ok_or(Exceptions::ParseException(None))?,
|
||||
char::from_u32('0' as u32 + fiveBitValue - 5).ok_or(Exceptions::parseEmpty())?,
|
||||
));
|
||||
}
|
||||
|
||||
@@ -434,7 +432,7 @@ impl<'a> GeneralAppIdDecoder<'_> {
|
||||
if (32..58).contains(&sixBitValue) {
|
||||
return Ok(DecodedChar::new(
|
||||
pos + 6,
|
||||
char::from_u32(sixBitValue + 33).ok_or(Exceptions::ParseException(None))?,
|
||||
char::from_u32(sixBitValue + 33).ok_or(Exceptions::parseEmpty())?,
|
||||
));
|
||||
}
|
||||
|
||||
@@ -445,9 +443,9 @@ impl<'a> GeneralAppIdDecoder<'_> {
|
||||
61 => '.',
|
||||
62 => '/',
|
||||
_ => {
|
||||
return Err(Exceptions::IllegalStateException(Some(format!(
|
||||
return Err(Exceptions::illegalState(format!(
|
||||
"Decoding invalid alphanumeric value: {sixBitValue}"
|
||||
))))
|
||||
)))
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -227,7 +227,7 @@ impl Reader for RSSExpandedReader {
|
||||
|
||||
Ok(result)
|
||||
} else {
|
||||
Err(Exceptions::NotFoundException(None))
|
||||
Err(Exceptions::notFoundEmpty())
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -297,9 +297,7 @@ impl RSSExpandedReader {
|
||||
if let Ok(to_add) = to_add_res {
|
||||
self.pairs.push(to_add);
|
||||
} else if self.pairs.is_empty() {
|
||||
return Err(to_add_res
|
||||
.err()
|
||||
.unwrap_or(Exceptions::IllegalStateException(None)));
|
||||
return Err(to_add_res.err().unwrap_or(Exceptions::illegalStateEmpty()));
|
||||
} else {
|
||||
// exit this loop when retrieveNextPair() fails and throws
|
||||
done = true;
|
||||
@@ -331,7 +329,7 @@ impl RSSExpandedReader {
|
||||
// }
|
||||
}
|
||||
|
||||
Err(Exceptions::NotFoundException(None))
|
||||
Err(Exceptions::notFoundEmpty())
|
||||
}
|
||||
|
||||
fn checkRows(&mut self, reverse: bool) -> Option<Vec<ExpandedPair>> {
|
||||
@@ -378,7 +376,7 @@ impl RSSExpandedReader {
|
||||
let row = self
|
||||
.rows
|
||||
.get(i)
|
||||
.ok_or(Exceptions::IndexOutOfBoundsException(None))?;
|
||||
.ok_or(Exceptions::indexOutOfBoundsEmpty())?;
|
||||
self.pairs.clear();
|
||||
for collectedRow in &collectedRows.clone() {
|
||||
// for (ExpandedRow collectedRow : collectedRows) {
|
||||
@@ -406,7 +404,7 @@ impl RSSExpandedReader {
|
||||
}
|
||||
}
|
||||
|
||||
Err(Exceptions::NotFoundException(None))
|
||||
Err(Exceptions::notFoundEmpty())
|
||||
}
|
||||
|
||||
/// Whether the pairs form a valid find pattern sequence,
|
||||
@@ -537,24 +535,24 @@ impl RSSExpandedReader {
|
||||
// Not private for unit testing
|
||||
pub(crate) fn constructRXingResult(pairs: &[ExpandedPair]) -> Result<RXingResult, Exceptions> {
|
||||
let binary = bit_array_builder::buildBitArray(&pairs.to_vec())
|
||||
.ok_or(Exceptions::IllegalStateException(None))?;
|
||||
.ok_or(Exceptions::illegalStateEmpty())?;
|
||||
|
||||
let mut decoder = abstract_expanded_decoder::createDecoder(&binary)?;
|
||||
let resultingString = decoder.parseInformation()?;
|
||||
|
||||
let firstPoints = pairs
|
||||
.get(0)
|
||||
.ok_or(Exceptions::IndexOutOfBoundsException(None))?
|
||||
.ok_or(Exceptions::indexOutOfBoundsEmpty())?
|
||||
.getFinderPattern()
|
||||
.as_ref()
|
||||
.ok_or(Exceptions::IllegalStateException(None))?
|
||||
.ok_or(Exceptions::illegalStateEmpty())?
|
||||
.getRXingResultPoints();
|
||||
let lastPoints = pairs
|
||||
.last()
|
||||
.ok_or(Exceptions::IndexOutOfBoundsException(None))?
|
||||
.ok_or(Exceptions::indexOutOfBoundsEmpty())?
|
||||
.getFinderPattern()
|
||||
.as_ref()
|
||||
.ok_or(Exceptions::IllegalStateException(None))?
|
||||
.ok_or(Exceptions::illegalStateEmpty())?
|
||||
.getRXingResultPoints();
|
||||
|
||||
let mut result = RXingResult::new(
|
||||
@@ -653,9 +651,7 @@ impl RSSExpandedReader {
|
||||
|
||||
let leftChar = self.decodeDataCharacter(
|
||||
row,
|
||||
pattern
|
||||
.as_ref()
|
||||
.ok_or(Exceptions::NotFoundException(None))?,
|
||||
pattern.as_ref().ok_or(Exceptions::notFoundEmpty())?,
|
||||
isOddPattern,
|
||||
true,
|
||||
)?;
|
||||
@@ -663,18 +659,16 @@ impl RSSExpandedReader {
|
||||
if !previousPairs.is_empty()
|
||||
&& previousPairs
|
||||
.last()
|
||||
.ok_or(Exceptions::NotFoundException(None))?
|
||||
.ok_or(Exceptions::notFoundEmpty())?
|
||||
.mustBeLast()
|
||||
{
|
||||
return Err(Exceptions::NotFoundException(None));
|
||||
return Err(Exceptions::notFoundEmpty());
|
||||
}
|
||||
|
||||
let rightChar = self
|
||||
.decodeDataCharacter(
|
||||
row,
|
||||
pattern
|
||||
.as_ref()
|
||||
.ok_or(Exceptions::NotFoundException(None))?,
|
||||
pattern.as_ref().ok_or(Exceptions::notFoundEmpty())?,
|
||||
isOddPattern,
|
||||
false,
|
||||
)
|
||||
@@ -706,11 +700,11 @@ impl RSSExpandedReader {
|
||||
} else {
|
||||
let lastPair = previousPairs
|
||||
.last()
|
||||
.ok_or(Exceptions::IndexOutOfBoundsException(None))?;
|
||||
.ok_or(Exceptions::indexOutOfBoundsEmpty())?;
|
||||
rowOffset = lastPair
|
||||
.getFinderPattern()
|
||||
.as_ref()
|
||||
.ok_or(Exceptions::IllegalStateException(None))?
|
||||
.ok_or(Exceptions::illegalStateEmpty())?
|
||||
.getStartEnd()[1] as i32;
|
||||
}
|
||||
let mut searchingEvenPair = previousPairs.len() % 2 != 0;
|
||||
@@ -762,7 +756,7 @@ impl RSSExpandedReader {
|
||||
isWhite = !isWhite;
|
||||
}
|
||||
}
|
||||
Err(Exceptions::NotFoundException(None))
|
||||
Err(Exceptions::notFoundEmpty())
|
||||
}
|
||||
|
||||
fn reverseCounters(counters: &mut [u32]) {
|
||||
@@ -859,7 +853,7 @@ impl RSSExpandedReader {
|
||||
let expectedElementWidth: f32 =
|
||||
(pattern.getStartEnd()[1] - pattern.getStartEnd()[0]) as f32 / 15.0;
|
||||
if (elementWidth - expectedElementWidth).abs() / expectedElementWidth > 0.3 {
|
||||
return Err(Exceptions::NotFoundException(None));
|
||||
return Err(Exceptions::notFoundEmpty());
|
||||
}
|
||||
|
||||
for (i, counter) in counters.iter().enumerate() {
|
||||
@@ -868,12 +862,12 @@ impl RSSExpandedReader {
|
||||
let mut count = (value + 0.5) as i32; // Round
|
||||
if count < 1 {
|
||||
if value < 0.3 {
|
||||
return Err(Exceptions::NotFoundException(None));
|
||||
return Err(Exceptions::notFoundEmpty());
|
||||
}
|
||||
count = 1;
|
||||
} else if count > 8 {
|
||||
if value > 8.7 {
|
||||
return Err(Exceptions::NotFoundException(None));
|
||||
return Err(Exceptions::notFoundEmpty());
|
||||
}
|
||||
count = 8;
|
||||
}
|
||||
@@ -913,7 +907,7 @@ impl RSSExpandedReader {
|
||||
let checksumPortion = oddChecksumPortion + evenChecksumPortion;
|
||||
|
||||
if (oddSum & 0x01) != 0 || !(4..=13).contains(&oddSum) {
|
||||
return Err(Exceptions::NotFoundException(None));
|
||||
return Err(Exceptions::notFoundEmpty());
|
||||
}
|
||||
|
||||
let group = ((13 - oddSum) / 2) as usize;
|
||||
@@ -961,12 +955,12 @@ impl RSSExpandedReader {
|
||||
1 => {
|
||||
if oddParityBad {
|
||||
if evenParityBad {
|
||||
return Err(Exceptions::NotFoundException(None));
|
||||
return Err(Exceptions::notFoundEmpty());
|
||||
}
|
||||
decrementOdd = true;
|
||||
} else {
|
||||
if !evenParityBad {
|
||||
return Err(Exceptions::NotFoundException(None));
|
||||
return Err(Exceptions::notFoundEmpty());
|
||||
}
|
||||
decrementEven = true;
|
||||
}
|
||||
@@ -974,12 +968,12 @@ impl RSSExpandedReader {
|
||||
-1 => {
|
||||
if oddParityBad {
|
||||
if evenParityBad {
|
||||
return Err(Exceptions::NotFoundException(None));
|
||||
return Err(Exceptions::notFoundEmpty());
|
||||
}
|
||||
incrementOdd = true;
|
||||
} else {
|
||||
if !evenParityBad {
|
||||
return Err(Exceptions::NotFoundException(None));
|
||||
return Err(Exceptions::notFoundEmpty());
|
||||
}
|
||||
incrementEven = true;
|
||||
}
|
||||
@@ -987,7 +981,7 @@ impl RSSExpandedReader {
|
||||
0 => {
|
||||
if oddParityBad {
|
||||
if !evenParityBad {
|
||||
return Err(Exceptions::NotFoundException(None));
|
||||
return Err(Exceptions::notFoundEmpty());
|
||||
}
|
||||
// Both bad
|
||||
if oddSum < evenSum {
|
||||
@@ -998,16 +992,16 @@ impl RSSExpandedReader {
|
||||
incrementEven = true;
|
||||
}
|
||||
} else if evenParityBad {
|
||||
return Err(Exceptions::NotFoundException(None));
|
||||
return Err(Exceptions::notFoundEmpty());
|
||||
}
|
||||
}
|
||||
|
||||
_ => return Err(Exceptions::NotFoundException(None)),
|
||||
_ => return Err(Exceptions::notFoundEmpty()),
|
||||
}
|
||||
|
||||
if incrementOdd {
|
||||
if decrementOdd {
|
||||
return Err(Exceptions::NotFoundException(None));
|
||||
return Err(Exceptions::notFoundEmpty());
|
||||
}
|
||||
Self::increment(&mut self.oddCounts, &self.oddRoundingErrors);
|
||||
}
|
||||
@@ -1016,7 +1010,7 @@ impl RSSExpandedReader {
|
||||
}
|
||||
if incrementEven {
|
||||
if decrementEven {
|
||||
return Err(Exceptions::NotFoundException(None));
|
||||
return Err(Exceptions::notFoundEmpty());
|
||||
}
|
||||
Self::increment(&mut self.evenCounts, &self.oddRoundingErrors);
|
||||
}
|
||||
|
||||
@@ -64,12 +64,12 @@ impl OneDReader for RSS14Reader {
|
||||
if right.getCount() > 1 && self.checkChecksum(left, right) {
|
||||
return self
|
||||
.constructRXingResult(left, right)
|
||||
.ok_or(Exceptions::IllegalStateException(None));
|
||||
.ok_or(Exceptions::illegalStateEmpty());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Err(Exceptions::NotFoundException(None))
|
||||
Err(Exceptions::notFoundEmpty())
|
||||
}
|
||||
}
|
||||
impl Reader for RSS14Reader {
|
||||
@@ -126,7 +126,7 @@ impl Reader for RSS14Reader {
|
||||
|
||||
Ok(result)
|
||||
} else {
|
||||
Err(Exceptions::NotFoundException(None))
|
||||
Err(Exceptions::notFoundEmpty())
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -343,7 +343,7 @@ impl RSS14Reader {
|
||||
|
||||
if outsideChar {
|
||||
if (oddSum & 0x01) != 0 || !(4..=12).contains(&oddSum) {
|
||||
return Err(Exceptions::NotFoundException(None));
|
||||
return Err(Exceptions::notFoundEmpty());
|
||||
}
|
||||
let group = ((12 - oddSum) / 2) as usize;
|
||||
let oddWidest = Self::OUTSIDE_ODD_WIDEST[group];
|
||||
@@ -358,7 +358,7 @@ impl RSS14Reader {
|
||||
))
|
||||
} else {
|
||||
if (evenSum & 0x01) != 0 || !(4..=10).contains(&evenSum) {
|
||||
return Err(Exceptions::NotFoundException(None));
|
||||
return Err(Exceptions::notFoundEmpty());
|
||||
}
|
||||
let group = ((10 - evenSum) / 2) as usize;
|
||||
let oddWidest = Self::INSIDE_ODD_WIDEST[group];
|
||||
@@ -417,7 +417,7 @@ impl RSS14Reader {
|
||||
isWhite = !isWhite;
|
||||
}
|
||||
}
|
||||
Err(Exceptions::NotFoundException(None))
|
||||
Err(Exceptions::notFoundEmpty())
|
||||
}
|
||||
|
||||
fn parseFoundFinderPattern(
|
||||
@@ -518,12 +518,12 @@ impl RSS14Reader {
|
||||
1 => {
|
||||
if oddParityBad {
|
||||
if evenParityBad {
|
||||
return Err(Exceptions::NotFoundException(None));
|
||||
return Err(Exceptions::notFoundEmpty());
|
||||
}
|
||||
decrementOdd = true;
|
||||
} else {
|
||||
if !evenParityBad {
|
||||
return Err(Exceptions::NotFoundException(None));
|
||||
return Err(Exceptions::notFoundEmpty());
|
||||
}
|
||||
decrementEven = true;
|
||||
}
|
||||
@@ -531,12 +531,12 @@ impl RSS14Reader {
|
||||
-1 => {
|
||||
if oddParityBad {
|
||||
if evenParityBad {
|
||||
return Err(Exceptions::NotFoundException(None));
|
||||
return Err(Exceptions::notFoundEmpty());
|
||||
}
|
||||
incrementOdd = true;
|
||||
} else {
|
||||
if !evenParityBad {
|
||||
return Err(Exceptions::NotFoundException(None));
|
||||
return Err(Exceptions::notFoundEmpty());
|
||||
}
|
||||
incrementEven = true;
|
||||
}
|
||||
@@ -544,7 +544,7 @@ impl RSS14Reader {
|
||||
0 => {
|
||||
if oddParityBad {
|
||||
if !evenParityBad {
|
||||
return Err(Exceptions::NotFoundException(None));
|
||||
return Err(Exceptions::notFoundEmpty());
|
||||
}
|
||||
// Both bad
|
||||
if oddSum < evenSum {
|
||||
@@ -555,15 +555,15 @@ impl RSS14Reader {
|
||||
incrementEven = true;
|
||||
}
|
||||
} else if evenParityBad {
|
||||
return Err(Exceptions::NotFoundException(None));
|
||||
return Err(Exceptions::notFoundEmpty());
|
||||
}
|
||||
}
|
||||
_ => return Err(Exceptions::NotFoundException(None)),
|
||||
_ => return Err(Exceptions::notFoundEmpty()),
|
||||
}
|
||||
|
||||
if incrementOdd {
|
||||
if decrementOdd {
|
||||
return Err(Exceptions::NotFoundException(None));
|
||||
return Err(Exceptions::notFoundEmpty());
|
||||
}
|
||||
Self::increment(&mut self.oddCounts, &self.oddRoundingErrors);
|
||||
}
|
||||
@@ -572,7 +572,7 @@ impl RSS14Reader {
|
||||
}
|
||||
if incrementEven {
|
||||
if decrementEven {
|
||||
return Err(Exceptions::NotFoundException(None));
|
||||
return Err(Exceptions::notFoundEmpty());
|
||||
}
|
||||
Self::increment(&mut self.evenCounts, &self.evenRoundingErrors);
|
||||
}
|
||||
|
||||
@@ -104,7 +104,7 @@ impl UPCAReader {
|
||||
|
||||
Ok(upcaRXingResult)
|
||||
} else {
|
||||
Err(Exceptions::NotFoundException(None))
|
||||
Err(Exceptions::notFoundEmpty())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,9 +48,9 @@ impl Writer for UPCAWriter {
|
||||
hints: &crate::EncodingHintDictionary,
|
||||
) -> Result<crate::common::BitMatrix, crate::Exceptions> {
|
||||
if format != &BarcodeFormat::UPC_A {
|
||||
return Err(Exceptions::IllegalArgumentException(Some(format!(
|
||||
return Err(Exceptions::illegalArgument(format!(
|
||||
"Can only encode UPC-A, but got {format:?}"
|
||||
))));
|
||||
)));
|
||||
}
|
||||
// Transform a UPC-A code into the equivalent EAN-13 code and write it that way
|
||||
self.0.encode_with_hints(
|
||||
|
||||
@@ -51,7 +51,7 @@ impl UPCEANReader for UPCEReader {
|
||||
let bestMatch = self.decodeDigit(row, &mut counters, rowOffset, &L_AND_G_PATTERNS)?;
|
||||
resultString.push(
|
||||
char::from_u32('0' as u32 + bestMatch as u32 % 10)
|
||||
.ok_or(Exceptions::ParseException(None))?,
|
||||
.ok_or(Exceptions::parseEmpty())?,
|
||||
);
|
||||
rowOffset += counters.iter().sum::<u32>() as usize;
|
||||
|
||||
@@ -69,7 +69,7 @@ impl UPCEANReader for UPCEReader {
|
||||
|
||||
fn checkChecksum(&self, s: &str) -> Result<bool, Exceptions> {
|
||||
self.checkStandardUPCEANChecksum(
|
||||
&convertUPCEtoUPCA(s).ok_or(Exceptions::IllegalArgumentException(None))?,
|
||||
&convertUPCEtoUPCA(s).ok_or(Exceptions::illegalArgumentEmpty())?,
|
||||
)
|
||||
}
|
||||
|
||||
@@ -133,17 +133,16 @@ impl UPCEReader {
|
||||
resultString.insert(
|
||||
0,
|
||||
char::from_u32('0' as u32 + numSys as u32)
|
||||
.ok_or(Exceptions::ParseException(None))?,
|
||||
.ok_or(Exceptions::parseEmpty())?,
|
||||
);
|
||||
resultString.push(
|
||||
char::from_u32('0' as u32 + d as u32)
|
||||
.ok_or(Exceptions::ParseException(None))?,
|
||||
char::from_u32('0' as u32 + d as u32).ok_or(Exceptions::parseEmpty())?,
|
||||
);
|
||||
return Ok(());
|
||||
}
|
||||
}
|
||||
}
|
||||
Err(Exceptions::NotFoundException(None))
|
||||
Err(Exceptions::notFoundEmpty())
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -46,24 +46,24 @@ impl OneDimensionalCodeWriter for UPCEWriter {
|
||||
// No check digit present, calculate it and add it
|
||||
let check = reader.getStandardUPCEANChecksum(
|
||||
&upc_e_reader::convertUPCEtoUPCA(&contents)
|
||||
.ok_or(Exceptions::IllegalArgumentException(None))?,
|
||||
.ok_or(Exceptions::illegalArgumentEmpty())?,
|
||||
)?;
|
||||
contents.push_str(&check.to_string());
|
||||
}
|
||||
8 => {
|
||||
if !reader.checkStandardUPCEANChecksum(
|
||||
&upc_e_reader::convertUPCEtoUPCA(&contents)
|
||||
.ok_or(Exceptions::IllegalArgumentException(None))?,
|
||||
.ok_or(Exceptions::illegalArgumentEmpty())?,
|
||||
)? {
|
||||
return Err(Exceptions::IllegalArgumentException(Some(
|
||||
return Err(Exceptions::illegalArgument(
|
||||
"Contents do not pass checksum".to_owned(),
|
||||
)));
|
||||
));
|
||||
}
|
||||
}
|
||||
_ => {
|
||||
return Err(Exceptions::IllegalArgumentException(Some(format!(
|
||||
return Err(Exceptions::illegalArgument(format!(
|
||||
"Requested contents should be 7 or 8 digits long, but got {length}"
|
||||
))))
|
||||
)))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -72,21 +72,21 @@ impl OneDimensionalCodeWriter for UPCEWriter {
|
||||
let firstDigit = contents
|
||||
.chars()
|
||||
.next()
|
||||
.ok_or(Exceptions::IndexOutOfBoundsException(None))?
|
||||
.ok_or(Exceptions::indexOutOfBoundsEmpty())?
|
||||
.to_digit(10)
|
||||
.ok_or(Exceptions::ParseException(None))? as usize; //Character.digit(contents.charAt(0), 10);
|
||||
.ok_or(Exceptions::parseEmpty())? as usize; //Character.digit(contents.charAt(0), 10);
|
||||
if firstDigit != 0 && firstDigit != 1 {
|
||||
return Err(Exceptions::IllegalArgumentException(Some(
|
||||
return Err(Exceptions::illegalArgument(
|
||||
"Number system must be 0 or 1".to_owned(),
|
||||
)));
|
||||
));
|
||||
}
|
||||
|
||||
let checkDigit = contents
|
||||
.chars()
|
||||
.nth(7)
|
||||
.ok_or(Exceptions::IndexOutOfBoundsException(None))?
|
||||
.ok_or(Exceptions::indexOutOfBoundsEmpty())?
|
||||
.to_digit(10)
|
||||
.ok_or(Exceptions::ParseException(None))? as usize; //Character.digit(contents.charAt(7), 10);
|
||||
.ok_or(Exceptions::parseEmpty())? as usize; //Character.digit(contents.charAt(7), 10);
|
||||
let parities = UPCEReader::NUMSYS_AND_CHECK_DIGIT_PATTERNS[firstDigit][checkDigit];
|
||||
let mut result = [false; CODE_WIDTH];
|
||||
|
||||
@@ -98,9 +98,9 @@ impl OneDimensionalCodeWriter for UPCEWriter {
|
||||
let mut digit = contents
|
||||
.chars()
|
||||
.nth(i)
|
||||
.ok_or(Exceptions::IndexOutOfBoundsException(None))?
|
||||
.ok_or(Exceptions::indexOutOfBoundsEmpty())?
|
||||
.to_digit(10)
|
||||
.ok_or(Exceptions::ParseException(None))? as usize; //Character.digit(contents.charAt(i), 10);
|
||||
.ok_or(Exceptions::parseEmpty())? as usize; //Character.digit(contents.charAt(i), 10);
|
||||
if (parities >> (6 - i) & 1) == 1 {
|
||||
digit += 10;
|
||||
}
|
||||
|
||||
@@ -88,7 +88,7 @@ impl UPCEANExtension2Support {
|
||||
)?;
|
||||
resultString.push(
|
||||
char::from_u32('0' as u32 + bestMatch as u32 % 10)
|
||||
.ok_or(Exceptions::ParseException(None))?,
|
||||
.ok_or(Exceptions::parseEmpty())?,
|
||||
);
|
||||
|
||||
rowOffset += counters.iter().sum::<u32>() as usize;
|
||||
@@ -105,15 +105,16 @@ impl UPCEANExtension2Support {
|
||||
}
|
||||
|
||||
if resultString.chars().count() != 2 {
|
||||
return Err(Exceptions::NotFoundException(None));
|
||||
return Err(Exceptions::notFoundEmpty());
|
||||
}
|
||||
|
||||
if resultString.parse::<u32>().map_err(|e| {
|
||||
Exceptions::ParseException(Some(format!("could not parse {resultString}: {e}")))
|
||||
})? % 4
|
||||
if resultString
|
||||
.parse::<u32>()
|
||||
.map_err(|e| Exceptions::parse(format!("could not parse {resultString}: {e}")))?
|
||||
% 4
|
||||
!= checkParity
|
||||
{
|
||||
return Err(Exceptions::NotFoundException(None));
|
||||
return Err(Exceptions::notFoundEmpty());
|
||||
}
|
||||
|
||||
Ok(rowOffset as u32)
|
||||
|
||||
@@ -87,7 +87,7 @@ impl UPCEANExtension5Support {
|
||||
)?;
|
||||
resultString.push(
|
||||
char::from_u32('0' as u32 + bestMatch as u32 % 10)
|
||||
.ok_or(Exceptions::ParseException(None))?,
|
||||
.ok_or(Exceptions::parseEmpty())?,
|
||||
);
|
||||
|
||||
rowOffset += counters.iter().sum::<u32>() as usize;
|
||||
@@ -105,15 +105,14 @@ impl UPCEANExtension5Support {
|
||||
}
|
||||
|
||||
if resultString.chars().count() != 5 {
|
||||
return Err(Exceptions::NotFoundException(None));
|
||||
return Err(Exceptions::notFoundEmpty());
|
||||
}
|
||||
|
||||
let checkDigit = Self::determineCheckDigit(lgPatternFound)?;
|
||||
if Self::extensionChecksum(resultString)
|
||||
.ok_or(Exceptions::IllegalArgumentException(None))?
|
||||
if Self::extensionChecksum(resultString).ok_or(Exceptions::illegalArgumentEmpty())?
|
||||
!= checkDigit as u32
|
||||
{
|
||||
return Err(Exceptions::NotFoundException(None));
|
||||
return Err(Exceptions::notFoundEmpty());
|
||||
}
|
||||
|
||||
Ok(rowOffset as u32)
|
||||
@@ -148,7 +147,7 @@ impl UPCEANExtension5Support {
|
||||
return Ok(d);
|
||||
}
|
||||
}
|
||||
Err(Exceptions::NotFoundException(None))
|
||||
Err(Exceptions::notFoundEmpty())
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -182,18 +182,18 @@ pub trait UPCEANReader: OneDReader {
|
||||
let end = endRange[1];
|
||||
let quietEnd = end + (end - endRange[0]);
|
||||
if quietEnd >= row.getSize() || !row.isRange(end, quietEnd, false)? {
|
||||
return Err(Exceptions::NotFoundException(None));
|
||||
return Err(Exceptions::notFoundEmpty());
|
||||
}
|
||||
|
||||
let resultString = result;
|
||||
|
||||
// UPC/EAN should never be less than 8 chars anyway
|
||||
if resultString.chars().count() < 8 {
|
||||
return Err(Exceptions::FormatException(None));
|
||||
return Err(Exceptions::formatEmpty());
|
||||
}
|
||||
|
||||
if !self.checkChecksum(&resultString)? {
|
||||
return Err(Exceptions::ChecksumException(None));
|
||||
return Err(Exceptions::checksumEmpty());
|
||||
}
|
||||
|
||||
let left = (startGuardRange[1] + startGuardRange[0]) as f32 / 2.0;
|
||||
@@ -241,7 +241,7 @@ pub trait UPCEANReader: OneDReader {
|
||||
}
|
||||
}
|
||||
if !valid {
|
||||
return Err(Exceptions::NotFoundException(None));
|
||||
return Err(Exceptions::notFoundEmpty());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -292,7 +292,7 @@ pub trait UPCEANReader: OneDReader {
|
||||
let char_in_question = s
|
||||
.chars()
|
||||
.nth(length - 1)
|
||||
.ok_or(Exceptions::IndexOutOfBoundsException(None))?;
|
||||
.ok_or(Exceptions::indexOutOfBoundsEmpty())?;
|
||||
let check = char_in_question.is_ascii_digit();
|
||||
|
||||
let check_against = &s[..length - 1]; //s.subSequence(0, length - 1);
|
||||
@@ -302,7 +302,7 @@ pub trait UPCEANReader: OneDReader {
|
||||
== if check {
|
||||
char_in_question
|
||||
.to_digit(10)
|
||||
.ok_or(Exceptions::ParseException(None))?
|
||||
.ok_or(Exceptions::parseEmpty())?
|
||||
} else {
|
||||
u32::MAX
|
||||
})
|
||||
@@ -314,13 +314,13 @@ pub trait UPCEANReader: OneDReader {
|
||||
let mut i = length as isize - 1;
|
||||
while i >= 0 {
|
||||
// for (int i = length - 1; i >= 0; i -= 2) {
|
||||
let digit =
|
||||
(s.chars()
|
||||
.nth(i as usize)
|
||||
.ok_or(Exceptions::IndexOutOfBoundsException(None))? as i32)
|
||||
- ('0' as i32);
|
||||
let digit = (s
|
||||
.chars()
|
||||
.nth(i as usize)
|
||||
.ok_or(Exceptions::indexOutOfBoundsEmpty())? as i32)
|
||||
- ('0' as i32);
|
||||
if !(0..=9).contains(&digit) {
|
||||
return Err(Exceptions::FormatException(None));
|
||||
return Err(Exceptions::formatEmpty());
|
||||
}
|
||||
sum += digit;
|
||||
|
||||
@@ -330,13 +330,13 @@ pub trait UPCEANReader: OneDReader {
|
||||
let mut i = length as isize - 2;
|
||||
while i >= 0 {
|
||||
// for (int i = length - 2; i >= 0; i -= 2) {
|
||||
let digit =
|
||||
(s.chars()
|
||||
.nth(i as usize)
|
||||
.ok_or(Exceptions::IndexOutOfBoundsException(None))? as i32)
|
||||
- ('0' as i32);
|
||||
let digit = (s
|
||||
.chars()
|
||||
.nth(i as usize)
|
||||
.ok_or(Exceptions::indexOutOfBoundsEmpty())? as i32)
|
||||
- ('0' as i32);
|
||||
if !(0..=9).contains(&digit) {
|
||||
return Err(Exceptions::FormatException(None));
|
||||
return Err(Exceptions::formatEmpty());
|
||||
}
|
||||
sum += digit;
|
||||
|
||||
@@ -423,7 +423,7 @@ pub trait UPCEANReader: OneDReader {
|
||||
}
|
||||
}
|
||||
|
||||
Err(Exceptions::NotFoundException(None))
|
||||
Err(Exceptions::notFoundEmpty())
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -460,7 +460,7 @@ pub trait UPCEANReader: OneDReader {
|
||||
if bestMatch >= 0 {
|
||||
Ok(bestMatch as usize)
|
||||
} else {
|
||||
Err(Exceptions::NotFoundException(None))
|
||||
Err(Exceptions::notFoundEmpty())
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user