Design Patterns
Recipe | Crates | Categories |
---|---|---|
Implement an Abstract Factory | ||
Clone a Struct Storing a Boxed Trait Object | [![dyn-clone][c-dyn-clone-badge]][c-dyn-clone] | |
pin-project and pin-project-lite | [![pin-project][c-pin-project-badge]][c-pin-project][![pin-project-lite][c-pin-project-lite-badge]][c-pin-project-lite] | |
Implement the Typestate Pattern in Rust |
FIXME
Implement an Abstract Factory
See also:
Clone a Struct Storing a Boxed Trait Object
The dyn-clone
⮳ crate provides a DynClone
trait that can be used in trait objects, and a clone_box
⮳ function that can clone any sized or dynamically sized implementation of DynClone
. Types that implement the standard library's std::clone::Clone
⮳ trait are automatically usable by a DynClone
trait object.
use dyn_clone::DynClone; trait MyTrait: DynClone { fn recite(&self); } impl MyTrait for String { fn recite(&self) { println!("{} ♫", self); } } fn main() { let line = "The slithy structs did gyre and gimble the namespace"; // Build a trait object holding a String. // This requires String to implement MyTrait and std::clone::Clone. let x: Box<dyn MyTrait> = Box::new(String::from(line)); x.recite(); // The type of x2 is a Box<dyn MyTrait> cloned from x. let x2 = dyn_clone::clone_box(&*x); x2.recite(); }
pin-project
and pin-project-lite
pin-project
⮳ is a crate for safe and ergonomic pin-projection. The #[pin_project]
attribute creates projection types covering all the fields of struct or enum.
A lightweight version of pin-project written with declarative macros.
The pin_project!
macro creates a projection type covering all the fields of struct.
// // COMING SOON
See also:
- https://doc.rust-lang.org/std/pin/index.html#projections-and-structural-pinning
- https://doc.rust-lang.org/std/pin/struct.Pin.html