use crate::SpatialError;
use molframe_core::parallel::BlockExecutionError;
pub(super) fn validate_cutoff(cutoff: f32) -> Result<(), SpatialError> {
if cutoff.is_finite() && cutoff >= 0.0 {
Ok(())
} else {
Err(SpatialError::InvalidCutoff)
}
}
pub(super) fn validate_indices(atoms: &[u32], position_count: usize) -> Result<(), SpatialError> {
for &atom in atoms {
let index = usize::try_from(atom).map_err(|_| SpatialError::NumericRangeExceeded)?;
if index >= position_count {
return Err(SpatialError::AtomOutOfBounds(atom));
}
}
Ok(())
}
pub(super) fn block_error(error: &BlockExecutionError<SpatialError>) -> SpatialError {
match error {
BlockExecutionError::Memory(error) => SpatialError::Memory(*error),
BlockExecutionError::Cancelled => SpatialError::Cancelled,
BlockExecutionError::Worker(_) => SpatialError::WorkerPanicked,
BlockExecutionError::Operation(error) => *error,
}
}