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或http://opensource.org/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