Derive Macro memflow_derive::Pod
source · #[derive(Pod)]
Expand description
Auto derive the Pod
trait for structs.
The type is checked for requirements of the Pod
trait:
-
Be annotated with
repr(C)
orrepr(transparent)
. -
Have every field’s type implement
Pod
itself. -
Not have any padding between its fields.
Compile errors
Error reporting is not very ergonomic due to how errors are detected:
-
error[E0277]: the trait bound $TYPE: Pod is not satisfied
The struct contains a field whose type does not implement
Pod
. -
error[E0512]: cannot transmute between types of different sizes, or dependently-sized types
This error means your struct has padding as its size is not equal to a byte array of length equal to the sum of the size of its fields.
-
error: no rules expected the token <
The struct contains generic parameters which are not supported. It may still be possible to manually implement
Pod
but extra care should be taken to ensure its invariants are upheld.
Remarks:
This custom derive macro is required because the dataview proc macro searches for ::dataview::derive_pod!(). See https://github.com/CasualX/dataview/blob/master/derive_pod/lib.rs for the original implementation.