Improved out-of-range error messages

This commit is contained in:
Josh Mitchell
2020-11-15 17:44:49 +11:00
parent 4a71ed001c
commit 2221531f75
2 changed files with 15 additions and 8 deletions

View File

@@ -29,15 +29,15 @@ pub enum Error {
NullInStr(std::ffi::NulError), NullInStr(std::ffi::NulError),
CouldNotCheckNAtoms(Box<Error>), CouldNotCheckNAtoms(Box<Error>),
/// Step was out of range for usize on this platform /// Step was out of range for usize on this platform
StepSizeOutOfRange(i32), StepOutOfRange(i32),
/// natoms was out of range for usize on this platform
NumAtomsOutOfRange(c_int),
/// A numeric cast from `value` failed during `task` /// A numeric cast from `value` failed during `task`
CastToCintFailed { CastToCintFailed {
source: std::num::TryFromIntError, source: std::num::TryFromIntError,
task: ErrorTask, task: ErrorTask,
value: usize, value: usize,
}, },
/// A numeric cast from `value` failed during `task`
NumAtomsOutOfRange(c_int),
} }
impl Error { impl Error {
@@ -137,9 +137,16 @@ impl std::fmt::Display for Error {
CouldNotCheckNAtoms(_err) => { CouldNotCheckNAtoms(_err) => {
write!(f, "Failed to read number of atoms in trajectory file") write!(f, "Failed to read number of atoms in trajectory file")
} }
StepSizeOutOfRange(n) | NumAtomsOutOfRange(n) => { StepOutOfRange(n) => write!(
write!(f, "Step {} does not fit in usize on this platform", n) f,
} "Illegal step size while reading trajectory: Failed to cast {} to usize.",
n
),
NumAtomsOutOfRange(n) => write!(
f,
"Illegal number of atoms while reading trajectory: Failed to cast {} to usize.",
n
),
CastToCintFailed { value, task, .. } => write!( CastToCintFailed { value, task, .. } => write!(
f, f,
"Numeric cast from {value}:usize to C int failed while {task}", "Numeric cast from {value}:usize to C int failed while {task}",

View File

@@ -277,7 +277,7 @@ impl Trajectory for XTCTrajectory {
if let Some(err) = check_code(code, ErrorTask::Read) { if let Some(err) = check_code(code, ErrorTask::Read) {
return Err(err); return Err(err);
} }
frame.step = usize::try_from(step).map_err(|_| Error::StepSizeOutOfRange(step))?; frame.step = usize::try_from(step).map_err(|_| Error::StepOutOfRange(step))?;
Ok(()) Ok(())
} }
} }
@@ -406,7 +406,7 @@ impl Trajectory for TRRTrajectory {
if let Some(err) = check_code(code, ErrorTask::Read) { if let Some(err) = check_code(code, ErrorTask::Read) {
return Err(err); return Err(err);
} }
frame.step = usize::try_from(step).map_err(|_| Error::StepSizeOutOfRange(step))?; frame.step = usize::try_from(step).map_err(|_| Error::StepOutOfRange(step))?;
Ok(()) Ok(())
} }
} }