Crate tract_pulse::internal::tract_core::dyn_clone   
source · Expand description
This 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.
§Example
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();
}This crate includes a macro for concisely implementing impl std::clone::Clone for Box<dyn MyTrait> in terms of dyn_clone::clone_box.
// As before.
trait MyTrait: DynClone {
    /* ... */
}
dyn_clone::clone_trait_object!(MyTrait);
// Now data structures containing Box<dyn MyTrait> can derive Clone:
#[derive(Clone)]
struct Container {
    trait_object: Box<dyn MyTrait>,
}The clone_trait_object! macro expands to just the following, which you can
handwrite instead if you prefer:
impl Clone for Box<dyn MyTrait> {
    fn clone(&self) -> Self {
        dyn_clone::clone_box(&**self)
    }
}
// and similar for Box<dyn MyTrait + Send>, Box<dyn MyTrait + Sync>, Box<dyn MyTrait + Send + Sync>Macros§
- Implement the standard libraryClonefor a trait object that hasDynCloneas a supertrait.
Traits§
- This trait is implemented by any type that implements [std::clone::Clone].
Functions§
- &mut Arc<T>—▸- &mut T
- &T—▸- T
- &T—▸- Box<T>
- &mut Rc<T>—▸- &mut T