Clone trait that is object-safe

Build Status Latest Version Rust Documentation

This crate provides a Clone trait that can be used in trait objects, and a clone_box function that can clone any sized or dynamically sized implementation of Clone. Types that implement the standard library's [std::clone::Clone] trait are automatically usable this way.

The signature of clone_box is:

rust fn clone_box<T>(t: &T) -> Box<T> where T: ?Sized + objekt::Clone

Example

```rust extern crate objekt;

trait MyTrait: objekt::Clone { 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<MyTrait> = Box::new(String::from(line));

x.recite();

// The type of x2 is a Box<MyTrait> cloned from x.
let x2 = objekt::clone_box(&*x);

x2.recite();

} ```


License

Licensed under either of Apache License, Version 2.0 or MIT license at your option.


Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this crate by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.