@@ -270,6 +270,7 @@ impl DatasetBuilder {
270
270
builder : self . builder ,
271
271
data : data. into ( ) ,
272
272
type_desc : type_desc. clone ( ) ,
273
+ conv : Conversion :: Soft ,
273
274
}
274
275
}
275
276
}
@@ -314,13 +315,26 @@ pub struct DatasetBuilderData<'d, T, D> {
314
315
builder : DatasetBuilderInner ,
315
316
data : ArrayView < ' d , T , D > ,
316
317
type_desc : TypeDescriptor ,
318
+ conv : Conversion ,
317
319
}
318
320
319
321
impl < ' d , T , D > DatasetBuilderData < ' d , T , D >
320
322
where
321
323
T : H5Type ,
322
324
D : ndarray:: Dimension ,
323
325
{
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
+
324
338
pub fn create < ' n , N : Into < Maybe < & ' n str > > > ( & self , name : N ) -> Result < Dataset > {
325
339
ensure ! (
326
340
self . data. is_standard_layout( ) ,
@@ -331,8 +345,7 @@ where
331
345
h5lock ! ( {
332
346
let dtype_src = Datatype :: from_type:: <T >( ) ?;
333
347
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) ?;
336
349
let ds = self . builder. create( & self . type_desc, name, & extents) ?;
337
350
if let Err ( err) = ds. write( self . data. view( ) ) {
338
351
self . builder. try_unlink( name) ;
0 commit comments