Use thiserror for error handling with less boilerplate

This commit is contained in:
Steve Cook
2023-02-20 09:41:28 -05:00
parent 01e4f4a126
commit f8b29f37db
135 changed files with 868 additions and 905 deletions

View File

@@ -61,7 +61,7 @@ impl Reader for AztecReader {
} else if let Ok(det) = detector.detect(true) {
det
} else {
return Err(Exceptions::notFound);
return Err(Exceptions::NOT_FOUND);
};
let points = detectorRXingResult.getPoints();

View File

@@ -60,7 +60,7 @@ impl Writer for AztecWriter {
if cset_name.to_lowercase() != "iso-8859-1" {
charset = Some(
encoding::label::encoding_from_whatwg_label(cset_name)
.ok_or(Exceptions::illegalArgument)?,
.ok_or(Exceptions::ILLEGAL_ARGUMENT)?,
);
}
}
@@ -96,7 +96,7 @@ fn encode(
layers: i32,
) -> Result<BitMatrix> {
if format != BarcodeFormat::AZTEC {
return Err(Exceptions::illegalArgumentWith(format!(
return Err(Exceptions::illegal_argument_with(format!(
"can only encode AZTEC, but got {format:?}"
)));
}

View File

@@ -162,13 +162,13 @@ fn get_encoded_data(corrected_bits: &[bool]) -> Result<String> {
result.push_str(
&encdr
.decode(&decoded_bytes, encoding::DecoderTrap::Strict)
.map_err(|a| Exceptions::illegalStateWith(a))?,
.map_err(|a| Exceptions::illegal_state_with(a))?,
);
decoded_bytes.clear();
match n {
0 => result.push(29 as char), // translate FNC1 as ASCII 29
7 => return Err(Exceptions::formatWith("FLG(7) is reserved and illegal")), // FLG(7) is reserved and illegal
7 => return Err(Exceptions::format_with("FLG(7) is reserved and illegal")), // FLG(7) is reserved and illegal
_ => {
// ECI is decimal integer encoded as 1-6 codes in DIGIT mode
let mut eci = 0;
@@ -180,7 +180,7 @@ fn get_encoded_data(corrected_bits: &[bool]) -> Result<String> {
let next_digit = read_code(corrected_bits, index, 4);
index += 4;
if !(2..=11).contains(&next_digit) {
return Err(Exceptions::formatWith("Not a decimal digit"));
return Err(Exceptions::format_with("Not a decimal digit"));
// Not a decimal digit
}
eci = eci * 10 + (next_digit - 2);
@@ -188,7 +188,7 @@ fn get_encoded_data(corrected_bits: &[bool]) -> Result<String> {
}
let charset_eci = CharacterSetECI::getCharacterSetECIByValue(eci);
if charset_eci.is_err() {
return Err(Exceptions::formatWith("Charset must exist"));
return Err(Exceptions::format_with("Charset must exist"));
}
encdr = CharacterSetECI::getCharset(&charset_eci?);
}
@@ -201,8 +201,8 @@ fn get_encoded_data(corrected_bits: &[bool]) -> Result<String> {
// That's including when that mode is a shift.
// Our test case dlusbs.png for issue #642 exercises that.
latch_table = shift_table; // Latch the current mode, so as to return to Upper after U/S B/S
shift_table = getTable(str.chars().nth(5).ok_or(Exceptions::indexOutOfBounds)?);
if str.chars().nth(6).ok_or(Exceptions::indexOutOfBounds)? == 'L' {
shift_table = getTable(str.chars().nth(5).ok_or(Exceptions::INDEX_OUT_OF_BOUNDS)?);
if str.chars().nth(6).ok_or(Exceptions::INDEX_OUT_OF_BOUNDS)? == 'L' {
latch_table = shift_table;
}
} else {
@@ -223,7 +223,7 @@ fn get_encoded_data(corrected_bits: &[bool]) -> Result<String> {
if let Ok(str) = encdr.decode(&decoded_bytes, encoding::DecoderTrap::Strict) {
result.push_str(&str);
} else {
return Err(Exceptions::illegalStateWith("bad encoding"));
return Err(Exceptions::illegal_state_with("bad encoding"));
}
// result.push_str(decodedBytes.toString(encoding.name()));
//} catch (UnsupportedEncodingException uee) {
@@ -275,7 +275,7 @@ fn get_character(table: Table, code: u32) -> Result<&'static str> {
Table::Mixed => Ok(MIXED_TABLE[code as usize]),
Table::Digit => Ok(DIGIT_TABLE[code as usize]),
Table::Punct => Ok(PUNCT_TABLE[code as usize]),
_ => Err(Exceptions::illegalStateWith("Bad table")),
_ => Err(Exceptions::illegal_state_with("Bad table")),
}
// switch (table) {
// case UPPER:
@@ -336,7 +336,7 @@ fn correct_bits(
let num_data_codewords = ddata.getNbDatablocks();
let num_codewords = rawbits.len() / codeword_size;
if num_codewords < num_data_codewords as usize {
return Err(Exceptions::formatWith(format!(
return Err(Exceptions::format_with(format!(
"numCodewords {num_codewords}< numDataCodewords{num_data_codewords}"
)));
}
@@ -369,7 +369,7 @@ fn correct_bits(
// for (int i = 0; i < numDataCodewords; i++) {
// let data_word = data_words[i];
if data_word == &0 || data_word == &mask {
return Err(Exceptions::format);
return Err(Exceptions::FORMAT);
//throw FormatException.getFormatInstance();
} else if data_word == &1 || data_word == &(mask - 1) {
stuffed_bits += 1;

View File

@@ -124,7 +124,7 @@ impl<'a> Detector<'_> {
|| !self.is_valid(bulls_eye_corners[2])
|| !self.is_valid(bulls_eye_corners[3])
{
return Err(Exceptions::notFoundWith("no valid points"));
return Err(Exceptions::not_found_with("no valid points"));
}
let length = 2 * self.nb_center_layers;
// Get the bits around the bull's eye
@@ -205,7 +205,7 @@ impl<'a> Detector<'_> {
return Ok(shift);
}
}
Err(Exceptions::notFoundWith("rotation failure"))
Err(Exceptions::not_found_with("rotation failure"))
}
/**
@@ -314,7 +314,7 @@ impl<'a> Detector<'_> {
}
if self.nb_center_layers != 5 && self.nb_center_layers != 7 {
return Err(Exceptions::notFound);
return Err(Exceptions::NOT_FOUND);
}
self.compact = self.nb_center_layers == 5;

View File

@@ -53,7 +53,7 @@ pub const WORD_SIZE: [u32; 33] = [
pub fn encode_simple(data: &str) -> Result<AztecCode> {
let Ok(bytes) = encoding::all::ISO_8859_1
.encode(data, encoding::EncoderTrap::Replace) else {
return Err(Exceptions::illegalArgumentWith(format!("'{data}' cannot be encoded as ISO_8859_1")));
return Err(Exceptions::illegal_argument_with(format!("'{data}' cannot be encoded as ISO_8859_1")));
};
encode_bytes_simple(&bytes)
}
@@ -71,7 +71,7 @@ pub fn encode(data: &str, minECCPercent: u32, userSpecifiedLayers: i32) -> Resul
if let Ok(bytes) = encoding::all::ISO_8859_1.encode(data, encoding::EncoderTrap::Strict) {
encode_bytes(&bytes, minECCPercent, userSpecifiedLayers)
} else {
Err(Exceptions::illegalArgumentWith(format!(
Err(Exceptions::illegal_argument_with(format!(
"'{data}' cannot be encoded as ISO_8859_1"
)))
}
@@ -98,7 +98,7 @@ pub fn encode_with_charset(
if let Ok(bytes) = charset.encode(data, encoding::EncoderTrap::Strict) {
encode_bytes_with_charset(&bytes, minECCPercent, userSpecifiedLayers, charset)
} else {
Err(Exceptions::illegalArgumentWith(format!(
Err(Exceptions::illegal_argument_with(format!(
"'{data}' cannot be encoded as ISO_8859_1"
)))
}
@@ -174,7 +174,7 @@ pub fn encode_bytes_with_charset(
MAX_NB_BITS
})
{
return Err(Exceptions::illegalArgumentWith(format!(
return Err(Exceptions::illegal_argument_with(format!(
"Illegal value {user_specified_layers} for layers"
)));
}
@@ -183,13 +183,13 @@ pub fn encode_bytes_with_charset(
let usable_bits_in_layers = total_bits_in_layer_var - (total_bits_in_layer_var % word_size);
stuffed_bits = stuffBits(&bits, word_size as usize)?;
if stuffed_bits.getSize() as u32 + ecc_bits > usable_bits_in_layers {
return Err(Exceptions::illegalArgumentWith(
return Err(Exceptions::illegal_argument_with(
"Data to large for user specified layer",
));
}
if compact && stuffed_bits.getSize() as u32 > word_size * 64 {
// Compact format only allows 64 data words, though C4 can hold more words than that
return Err(Exceptions::illegalArgumentWith(
return Err(Exceptions::illegal_argument_with(
"Data to large for user specified layer",
));
}
@@ -203,7 +203,7 @@ pub fn encode_bytes_with_charset(
loop {
// for (int i = 0; ; i++) {
if i > MAX_NB_BITS {
return Err(Exceptions::illegalArgumentWith(
return Err(Exceptions::illegal_argument_with(
"Data too large for an Aztec code",
));
}
@@ -474,7 +474,7 @@ fn getGF(wordSize: usize) -> Result<GenericGFRef> {
8 => Ok(get_predefined_genericgf(PredefinedGenericGF::AztecData8)),
10 => Ok(get_predefined_genericgf(PredefinedGenericGF::AztecData10)),
12 => Ok(get_predefined_genericgf(PredefinedGenericGF::AztecData12)),
_ => Err(Exceptions::illegalArgumentWith(format!(
_ => Err(Exceptions::illegal_argument_with(format!(
"Unsupported word size {wordSize}"
))),
}

View File

@@ -248,7 +248,7 @@ impl HighLevelEncoder {
initial_state = initial_state.appendFLGn(CharacterSetECI::getValue(&eci))?;
}
} else {
return Err(Exceptions::illegalArgumentWith(
return Err(Exceptions::illegal_argument_with(
"No ECI code for character set",
));
}

View File

@@ -83,7 +83,7 @@ impl State {
token.add(0, 3); // 0: FNC1
} else */
if eci > 999999 {
return Err(Exceptions::illegalArgumentWith(
return Err(Exceptions::illegal_argument_with(
"ECI code must be between 0 and 999999",
));
// throw new IllegalArgumentException("ECI code must be between 0 and 999999");
@@ -91,7 +91,7 @@ impl State {
let Ok(eci_digits) = encoding::all::ISO_8859_1
.encode(&format!("{eci}"), encoding::EncoderTrap::Strict)
else {
return Err(Exceptions::illegalArgument)
return Err(Exceptions::ILLEGAL_ARGUMENT)
};
// let eciDigits = Integer.toString(eci).getBytes(StandardCharsets.ISO_8859_1);
token.add(eci_digits.len() as i32, 3); // 1-6: number of ECI digits

View File

@@ -34,7 +34,7 @@ impl TokenType {
match self {
TokenType::Simple(a) => a.appendTo(bit_array, text),
TokenType::BinaryShift(a) => a.appendTo(bit_array, text),
TokenType::Empty => Err(Exceptions::illegalStateWith(
TokenType::Empty => Err(Exceptions::illegal_state_with(
"cannot appendTo on Empty final item",
)),
}