Skip to content

Commit 6154664

Browse files
committed
seal object reference trait.
This change adds the private ObjectReferencePrivate trait which is used to seal the ObjectReference trait and prevent outside implementations. Refs: metno#36
1 parent eb70091 commit 6154664

File tree

3 files changed

+16
-3
lines changed

3 files changed

+16
-3
lines changed

hdf5/src/hl/references.rs

+9-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,15 @@ pub use legacy::ObjectReference1;
1313
#[cfg(feature = "1.12.1")]
1414
pub use standard::ObjectReference2;
1515

16-
pub trait ObjectReference: Sized + H5Type {
16+
mod private {
17+
pub trait ObjectReferencePrivate {}
18+
}
19+
20+
/// The trait for all object references. This provides a common interface
21+
/// over the legacy and standard reference types.
22+
///
23+
/// This trait is sealed and cannot be implemented for types outside `hdf5::hl`.
24+
pub trait ObjectReference: Sized + H5Type + private::ObjectReferencePrivate {
1725
const REF_TYPE: H5R_type_t;
1826
fn ptr(&self) -> *const c_void;
1927

hdf5/src/hl/references/legacy.rs

+4-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ use hdf5_sys::h5r::H5R_OBJECT as H5R_OBJECT1;
1414
#[cfg(feature = "1.12.0")]
1515
use hdf5_sys::h5r::H5R_OBJECT1;
1616

17-
use crate::{Location, ObjectReference};
17+
use crate::{Location};
18+
use super::{ObjectReference, private::ObjectReferencePrivate};
1819

1920
#[repr(transparent)]
2021
#[derive(Debug, Copy, Clone)]
@@ -28,6 +29,8 @@ unsafe impl H5Type for ObjectReference1 {
2829
}
2930
}
3031

32+
impl ObjectReferencePrivate for ObjectReference1 {}
33+
3134
impl ObjectReference for ObjectReference1 {
3235
const REF_TYPE: hdf5_sys::h5r::H5R_type_t = H5R_OBJECT1;
3336

hdf5/src/hl/references/standard.rs

+3-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use hdf5_sys::h5o::H5O_type_t;
66
use hdf5_sys::h5r::H5R_type_t::H5R_OBJECT2;
77
use hdf5_sys::h5r::{H5R_ref_t, H5Rcreate_object, H5Rdestroy, H5Rget_obj_type3, H5Ropen_object};
88

9-
use super::ObjectReference;
9+
use super::{ObjectReference, private::ObjectReferencePrivate};
1010
use crate::internal_prelude::*;
1111
use crate::Location;
1212

@@ -43,6 +43,8 @@ impl Drop for StdReference {
4343
#[derive(Debug)]
4444
pub struct ObjectReference2(StdReference);
4545

46+
impl ObjectReferencePrivate for ObjectReference2 {}
47+
4648
impl ObjectReference for ObjectReference2 {
4749
const REF_TYPE: hdf5_sys::h5r::H5R_type_t = H5R_OBJECT2;
4850

0 commit comments

Comments
 (0)