From 97077954f8bb3bc249a20ebde57eca47b01ff2fd Mon Sep 17 00:00:00 2001 From: Pat Hickey Date: Wed, 22 Jan 2020 17:23:29 -0800 Subject: [PATCH] enum generation: fill in GuestTypeCopy impl --- crates/generate/src/types.rs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/crates/generate/src/types.rs b/crates/generate/src/types.rs index 4b107f4f90..e517134c9f 100644 --- a/crates/generate/src/types.rs +++ b/crates/generate/src/types.rs @@ -82,12 +82,15 @@ fn define_enum(names: &Names, name: &witx::Id, e: &witx::EnumDatatype) -> TokenS impl ::memory::GuestTypeCopy for #ident { fn read_val(src: ::memory::GuestPtr<#ident>) -> Result<#ident, ::memory::GuestValueError> { - // Get the pointer to memory, cast it to *const #repr, read_unaligned, then use the tryinto - unimplemented!() + use ::std::convert::TryInto; + let val = unsafe { ::std::ptr::read_unaligned(src.ptr() as *const #repr) }; + val.try_into() } fn write_val(val: #ident, dest: ::memory::GuestPtrMut<#ident>) { - // use the into<#repr>, get pointer to memory, write_unaligned - unimplemented!() + let val: #repr = val.into(); + unsafe { + ::std::ptr::write_unaligned(dest.ptr_mut() as *mut #repr, val) + }; } } ));