for simple cases, rust has repr(C)enums, but in general, tricky to model what I would like to call "internally discriminated sum type" in a way that feels natural and idiomatic in rust. I would typically just make the ffi data structures declared as distinct types, then create a rust enum to sum them up. it works pretty well in practice.
you should properly parse/deserialize the bytes into strongly typed value, instead of clever type-punning.
did you measure the code's performance? are you sure the memcpy-es are the bottle neck? personally, I would just go the simple route and not preemptively micro-optimize in such cases.
that being said, if you do need to eliminate the copies, you can always parse the bytes "in-place" and return borrowed data, given the data layout is really compatible (e.g. alignment, padding, etc).