Design Patterns
Recipe | Crates | Categories |
---|---|---|
Implement an abstract factory | {{#crate }} | |
Clone a struct storing a boxed trait object |
[design_patterns.incl: review (P1)](https://github.com/john-cd/rust_howto/issues/460)
| Implement the typestate pattern in Rust | {{#crate }} | |
Implement an abstract factory
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(); }
[design_patterns: rethink where that stuff should go (P1)](https://github.com/john-cd/rust_howto/issues/461)
Implement the typestate pattern in Rust
The typestate pattern is an API design pattern that encodes information about an object’s run-time state in its compile-time type. typestate pattern