#owned #borrowed #cow #compile-time

maybe-owned-trait

编译时已知类型的所有或借用值

3 个不稳定版本

0.2.1 2023年9月14日
0.2.0 2023年9月14日
0.1.0 2023年9月14日

#2359Rust 模式

MIT/Apache

9KB
144

编译时已知类型的所有或借用值

Crates.io Downloads Documentation License Dependency Status

本软件包提供了一个 MaybeOwned 特性,允许您将所有或借用值传递给函数。与 std::borrow::Cowbeef::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::Cowbeef::lean::CowMaybeOwned 实现。

依赖项

~10KB