Transfer is to move what clone is to copy ========================================= Note: This crate, as well as [`stackpin`](https://github.com/dureuill/stackpin/) is very much a work in progress, and is published in the hope that it will be of interest for further work. The `Transfer` trait executes user code to take a value from an unmovable instance of a struct to another instance. In this way, it is similar to the `Clone` trait, that allows to execute user code to clone a value that is not copiable. The `Transfer` trait is also comparable to the move constructor of C++. Hold on, what is an unmovable struct? ------------------------------------- Rust does not natively expose the concept of "unmovable types". However, thanks to [`Pin`](std::pin::Pin) and `unsafe`, it is possible to express this concept in the type system. `Transfer` leverages the [`stackpin`](https://github.com/dureuill/stackpin/) crate (by the same author) to build type safe abstractions for Unmovable types. Examples -------- * The unit tests for `Transfer` demonstrate a `SecretU64` type, that attempt to erase itself securely when it gets out of scope. * An example for `Transfer` is `DynRef`, a type of reference that uses an external `Lifetime` struct to represent the lifetime of `DynRef`.