#borrow #higher #duplicates #prevent #type #argument #kinded

nightly ref_clone

作为高阶类型实现的借用,可用于防止代码重复

8 个版本 (破坏性更改)

0.8.0 2020 年 11 月 26 日
0.7.0 2020 年 10 月 16 日
0.6.0 2020 年 10 月 9 日
0.5.0 2020 年 9 月 23 日
0.1.0 2020 年 9 月 9 日

#11#prevent

每月 25 次下载

MIT 许可证

13KB
313 代码行

该包提供了一种将借用作为高阶类型实现的实现。

这可以通过传递借用类型的类型参数来抽象借用类型。

示例

#[RefAccessors]
struct Example {
    pub value: u8,
}
fn get_example_value<'a, T: RefType>(x: Ref<'a, Example, T>) -> Ref<'a, u8, T> {
    let x = x.to_wrapped();
    x.value
}
fn main() {
    let mut ex = Example {
        value: 8
    };
    {
        let ex_ref = Shared::new(&ex);
        println!("{}", get_example_value(ex_ref)); // = 8
    }
    {
        let ex_mut = Unique::new(&mut ex);
        *get_example_value(ex_mut).as_mut() = 1;
    }
    println!("{}", ex.value); // = 1
    {
        let ex_ref = Shared::new(&ex);
        println!("{}", get_example_value(ex_ref)); // = 1
    }
}

依赖关系

~1.5MB
~35K SLoC