summaryrefslogtreecommitdiff
path: root/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib.rs')
-rw-r--r--src/lib.rs12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/lib.rs b/src/lib.rs
index dbce335..f482b5c 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -812,6 +812,18 @@ impl FieldOwned<'_>
unsafe { &*ptr.cast::<T>() }
}
+
+ pub fn into_boxed<T: 'static>(mut self) -> Box<T>
+ {
+ assert_eq!(TypeId::of::<T>(), self.field_metadata.type_id);
+
+ let layout = self.bytes.layout();
+
+ assert_eq!(layout.size(), size_of::<T>());
+ assert_eq!(layout.align(), align_of::<T>());
+
+ unsafe { Box::from_raw(self.bytes.as_slice_mut().as_mut_ptr().cast::<T>()) }
+ }
}
#[derive(Debug)]