#[derive(ShallowCopy)]Expand description
Implementation for #[derive(ShallowCopy)]
evmap provides the ShallowCopy trait, which allows you to
cheaply alias types that don’t otherwise implement Copy. Basic implementations are provided
for common types such as String and Vec, but it must be implemented manually for structs
using these types.
This macro attempts to simplify this task. It only works on types whose members all implement
ShallowCopy. If this is not possible, consider using
CopyValue, Box, or Arc instead.
§Usage example
#[derive(ShallowCopy)]
struct Thing { field: i32 }
#[derive(ShallowCopy)]
struct Generic<T> { field: T }
#[derive(ShallowCopy)]
enum Things<T> { One(Thing), Two(Generic<T>) }§Generated implementations
The generated implementation calls
shallow_copy on all the members of the
type, and lifts the ManuallyDrop wrappers to the top-level return type.
For generic types, the derive adds ShallowCopy bounds to all the type parameters.
For instance, for the following code…
#[derive(ShallowCopy)]
struct Generic<T> { field: T }…the derive generates…
impl<T: ShallowCopy> ShallowCopy for Generic<T> {
unsafe fn shallow_copy(&self) -> ManuallyDrop<Self> {
ManuallyDrop::new(Self {
field: ManuallyDrop::into_inner(ShallowCopy::shallow_copy(&self.field))
})
}
}