#智能指针 #cow #no-std #traits #constraints #relaxed #clone-on-write

no-std laxcow

具有宽松特徵约束的克隆-on-写入智能指针

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 模式

MIT/Apache

19KB
312

LaxCow

CI status Crate Docs License

类似于 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

此示例展示了 LaxCowCow 之间的差异。它使 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 许可证定义,您有意提交的任何贡献,均应根据上述方式双许可,不附加任何额外条款或条件。

无运行时依赖

功能