5 个版本
使用旧的 Rust 2015
| 0.3.4 | 2020 年 5 月 23 日 |
|---|---|
| 0.3.3 | 2020 年 5 月 22 日 |
| 0.3.2 | 2018 年 9 月 8 日 |
| 0.3.0 | 2017 年 9 月 6 日 |
| 0.2.0 | 2017 年 5 月 17 日 |
#126 in Rust 模式
301,967 每月下载量
用于 291 个 crate(17 个直接使用)
36KB
712 行
maybe-owned

提供不同的类型 MaybeOwned<'a,T>,与 std 的 Cow 不同,它实现了 From<T> 和 From<&'a T>,且不需要 ToOwned
此crate提供了一个MaybeOwned<'a,T>枚举。与std::borrow::Cow不同,它实现了From<T>和From<&'a T>,并且不需要实现ToOwned。这对于主要消耗T且未实现ToOwned或通过Clone实现ToOwned的API来说可能很好,但它也意味着它的String借用版本是&String而不是&str,这使得它在处理String或Vec等情况下性能较差。
文档可以在docs.rs上查看。
示例
请参阅examples目录和文档以获取更完整的示例。
MaybeOwned相较于Cow的主要优势在于API设计,允许API消费者传递T和&'a T
//... in a trait implementation
fn register<D>(&mut self, key: SomeId, data: D)
where D: Into<MaybeOwned<'a, Data>>
{
self.map.entry(key).or_insert_with(||data.into());
}
//...
//... in usage
// use owned data
registry.register(id1, data_owned);
// use a reference to the data
registry.register(id2, &data_ref);
// it ok to use the same reference again
registry.register(id3, &data_ref);
//...
许可证
许可协议为以下之一
- Apache License, Version 2.0, (LICENSE-APACHE或https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT或https://open-source.org.cn/licenses/MIT)
任选其一。
贡献
除非你明确声明,否则任何有意提交以包含在作品中的贡献,根据Apache-2.0许可证的定义,将按上述方式双重许可,不附加任何额外条款或条件。
变更日志
-
v0.3.4:- 添加了
make_owned()作为to_mut()的替代品,但也可用于MaybeOwnedMut,并更清楚地说明了其功能。 - 向
MaybeOwned添加了as_mut()方法,该方法返回一个Option<&mut T> - 为
MaybeOwnedMut添加了缺少的BorrowMut实现
- 添加了
-
v0.3.3:- 添加了MaybeOwnedMut
-
v0.3.2:- 添加了传递的
std::ops实现
- 添加了传递的
-
v0.3.1:- 添加了
serde支持
- 添加了
依赖项
~175KB