Skip to content

Commit 09ada50

Browse files
committed
Add conversion options for DatasetBuilderData
1 parent 092bab3 commit 09ada50

File tree

1 file changed

+15
-2
lines changed

1 file changed

+15
-2
lines changed

src/hl/dataset.rs

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -270,6 +270,7 @@ impl DatasetBuilder {
270270
builder: self.builder,
271271
data: data.into(),
272272
type_desc: type_desc.clone(),
273+
conv: Conversion::Soft,
273274
}
274275
}
275276
}
@@ -314,13 +315,26 @@ pub struct DatasetBuilderData<'d, T, D> {
314315
builder: DatasetBuilderInner,
315316
data: ArrayView<'d, T, D>,
316317
type_desc: TypeDescriptor,
318+
conv: Conversion,
317319
}
318320

319321
impl<'d, T, D> DatasetBuilderData<'d, T, D>
320322
where
321323
T: H5Type,
322324
D: ndarray::Dimension,
323325
{
326+
/// Set maximum allowed conversion level.
327+
pub fn conversion(mut self, conv: Conversion) -> Self {
328+
self.conv = conv;
329+
self
330+
}
331+
332+
/// Disallow all conversions.
333+
pub fn no_convert(mut self) -> Self {
334+
self.conv = Conversion::NoOp;
335+
self
336+
}
337+
324338
pub fn create<'n, N: Into<Maybe<&'n str>>>(&self, name: N) -> Result<Dataset> {
325339
ensure!(
326340
self.data.is_standard_layout(),
@@ -331,8 +345,7 @@ where
331345
h5lock!({
332346
let dtype_src = Datatype::from_type::<T>()?;
333347
let dtype_dst = Datatype::from_descriptor(&self.type_desc)?;
334-
// TODO: soft conversion? hard? user-specifiable?
335-
dtype_src.ensure_convertible(&dtype_dst, Conversion::Soft)?;
348+
dtype_src.ensure_convertible(&dtype_dst, self.conv)?;
336349
let ds = self.builder.create(&self.type_desc, name, &extents)?;
337350
if let Err(err) = ds.write(self.data.view()) {
338351
self.builder.try_unlink(name);

0 commit comments

Comments
 (0)