14 个版本

0.2.2 2023 年 1 月 28 日
0.2.1 2022 年 9 月 22 日
0.1.10 2022 年 9 月 22 日
0.1.5 2022 年 8 月 29 日

385无标准库 中排名

每月下载量 35
async-http-body 中使用

自定义许可

11KB
206

请阅读此内容

该项目尚未准备好成为产品。当 GAT 稳定时,我将完善一切。

Self-Reference

自引用助手(灵感来自 Selfie

这个 crate 提供了对其自引用的安全访问。主要思想是在对象未固定(这既不安全又使许多自引用 crate 更加复杂)时不在初始化引用,只提供固定引用,使设计自引用对象变得更加容易。在 self-reference crate 中,你只能初始化具有 'static 生命周期的引用对象,这意味着总是安全的。

初始化引用对象

与其他自引用 crate 的主要区别在于初始化引用对象。你只能初始化具有 'static 生命周期的引用对象

let mut reference: SelfReference<String, Ref<str>> = SelfReference::new(String::new(), || {
    // you can't get reference of object while initialization.
    // only possible cases are reference that has `'static` lifetime.
    ""
});
pin_mut!(reference);

// this is totally SAFE. this lowers `'static` lifetime into some other lifetime.
reference.get_ref();

重置机制

初始化引用对象的唯一方法是使用 reset 方法。记住!你只能在 SelfReference 对象固定时使用重置方法。

let mut reference: SelfReference<String, Ref<str>> = SelfReference::new("self-reference".to_string(), || "");
pin_mut!(reference);

// You can reset object to set referencial object to hold object itself.
reference.reset_unpin(|s| &s[..4]);
println!("{}", reference.get_ref()); // prints "self"

依赖项

~325–790KB
~17K SLoC