Skip to content

Commit

Permalink
Require matching data types in MDArray::read_into_slice
Browse files Browse the repository at this point in the history
  • Loading branch information
lnicola committed Sep 2, 2022
1 parent cb0ba5d commit 76c4974
Showing 1 changed file with 13 additions and 0 deletions.
13 changes: 13 additions & 0 deletions src/raster/mdarray.rs
Expand Up @@ -162,6 +162,17 @@ impl<'a> MDArray<'a> {
let rv = unsafe {
let data_type = GDALMDArrayGetDataType(self.c_mdarray);

// HACK: this is too strict, but see https://github.com/georust/gdal/issues/290
let extended_data_type = self.datatype();
if !extended_data_type.class().is_numeric()
|| extended_data_type.numeric_datatype() != T::gdal_type()
{
return Err(GdalError::UnsupportedMdDataType {
data_type: self.datatype().class(),
method_name: "GDALMDArrayRead",
});
}

let rv = gdal_sys::GDALMDArrayRead(
self.c_mdarray,
array_start_index.as_ptr(),
Expand Down Expand Up @@ -920,6 +931,8 @@ mod tests {
let values = md_array.read_as::<u8>(vec![0, 0], vec![20, 20]).unwrap();

assert_eq!(&values[..4], &[181, 181, 156, 148]);

assert!(md_array.read_as::<u16>(vec![0, 0], vec![20, 20]).is_err());
}

#[test]
Expand Down

0 comments on commit 76c4974

Please sign in to comment.