4 个版本
0.2.0 | 2023 年 4 月 28 日 |
---|---|
0.1.2 | 2023 年 1 月 1 日 |
0.1.1 | 2022 年 11 月 20 日 |
0.1.0 | 2022 年 11 月 20 日 |
#2157 in Rust 模式
19KB
312 行
LaxCow
类似于 Cow 的克隆-on-写入智能指针,但具有宽松的特徵约束。该包完全 no_std
。
示例
简单用法
use laxcow::LaxCow;
let lc = LaxCow::Borrowed("foobar");
let lc2 = lc.clone();
assert_eq!(lc2, LaxCow::Borrowed("foobar"));
let owned = lc.into_owned();
assert_eq!(owned, "foobar".to_owned());
使用 Cow
不可能的用法
存储不实现 Clone
的借用结构体。这是因为 LaxCow::Owned
变体不受通过 ToOwned
特徵的 LaxCow::Borrowed
变体限制。
use laxcow::LaxCow;
struct Foo;
// We don't care about the owned type as it is not used.
let laxcow = LaxCow::<_, ()>::Borrowed(&Foo);
Cow
定义通过包装 LaxCow
此示例展示了 LaxCow
和 Cow
之间的差异。它使 Cow
成为结构体,但在这里仅作为示例有效。
use laxcow::LaxCow;
struct Cow<'a, T: ?Sized + ToOwned>(LaxCow::<'a, T, <T as ToOwned>::Owned>);
无需 alloc
也可用性
LaxCow
可在不使用 alloc
的情况下使用,但这会大大限制其使用,因为 ToOwned
定义在 alloc
中。与 Cow 的交互也不可行。在 no_std
环境中,克隆-on-写入功能是否有用也值得商榷,但此包试图不做出任何关于使用的假设。
许可
根据以下任一许可授权:
- Apache 许可证 2.0 版 (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
供您选择。
除非您明确说明,否则根据 Apache-2.0 许可证定义,您有意提交的任何贡献,均应根据上述方式双许可,不附加任何额外条款或条件。