Clone-on-write smart pointer similar to Cow, but with relaxed trait constraints. Crate is totally no_std
.
Examples
Simple usage
use LaxCow;
let lc = Borrowed;
let lc2 = lc.clone;
assert_eq!;
let owned = lc.into_owned;
assert_eq!;
Usage not possible with 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.
use LaxCow;
;
// We don't care about the owned type as it is not used.
let laxcow = Borrowed;
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.
use LaxCow;
;
Usability without alloc
LaxCow
can be used without alloc
but this restricts the usage quite a bit as ToOwned
is defined in alloc
.
Interaction with Cow also is not possible. It is also
debatable if clone-on-write functionality is useful in no_std
environment, but this crate tries not to make
any assumptions about the usage.
License
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
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.