3 个不稳定版本
0.2.1 | 2023年9月14日 |
---|---|
0.2.0 | 2023年9月14日 |
0.1.0 | 2023年9月14日 |
#2359 在 Rust 模式
9KB
144 行
编译时已知类型的所有或借用值
本软件包提供了一个 MaybeOwned
特性,允许您将所有或借用值传递给函数。与 std::borrow::Cow
和 beef::Cow
不同,此特性
然而,它也增加了额外的心理负担,在某些情况下可能会引起泛型引起的难题。
最终,使用属性 proc 宏可能使定义站点变得更整洁。
示例
use rand::Rng;
use maybe_owned_trait::MaybeOwned;
use std::path::{Path, PathBuf};
// Definition site is a bit more verbose than with `Cow`, yet still reasonable
fn my_fn(path: impl for<'a> MaybeOwned<Owned = PathBuf, Borrowed<'a> = &'a Path>) {
// Of course, you'll have a meaningful condition here
if rand::thread_rng().gen::<bool>() {
let path_buf: PathBuf = path.to_owned();
println!("Owned buf: {:?}", path_buf);
} else {
let path: &Path = path.borrow();
println!("Borrowed path: {:?}", path);
};
}
let path = PathBuf::from("hello");
// Call sites are clean
my_fn(&path);
my_fn(path);
启用 beef
功能 后,此软件包还提供了对 beef::Cow
和 beef::lean::Cow
的 MaybeOwned
实现。
依赖项
~10KB