diff options
Diffstat (limited to 'src/lib.rs')
-rw-r--r-- | src/lib.rs | 12 |
1 files changed, 12 insertions, 0 deletions
@@ -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)] |