Clone-on-write smart pointer similar to Cow, but with relaxed trait constraints. Crate is totally no_std
.
```rust use laxcow::LaxCow;
let lc = LaxCow::Borrowed("foobar");
let lc2 = lc.clone(); assert_eq!(lc2, LaxCow::Borrowed("foobar"));
let owned = lc.intoowned(); asserteq!(owned, "foobar".to_owned()); ```
Cow
Storing a borrowed struct which doesn't implement Clone
.
This is possible because LaxCow::Owned
variant is not restricted
by the LaxCow::Borrowed
variant via ToOwned
trait.
```rust use laxcow::LaxCow;
struct Foo;
// We don't care about the owned type as it is not used. let laxcow = LaxCow::<_, ()>::Borrowed(&Foo); ```
Cow
definition by wrapping LaxCow
This example shows the difference between LaxCow
and Cow
. It makes Cow
a struct, but only works here as an example.
```rust use laxcow::LaxCow;
struct Cow<'a, T: ?Sized + ToOwned>(LaxCow::<'a, T,
Licensed under either of
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.