Crates.io | self-reference |
lib.rs | self-reference |
version | 0.2.2 |
source | src |
created_at | 2022-08-27 19:54:37.286434 |
updated_at | 2023-01-28 03:44:04.31864 |
description | A Self-Reference Helper |
homepage | |
repository | https://github.com/ArtBlnd/self-reference |
max_upload_size | |
id | 653567 |
size | 11,668 |
This project is not product ready. I am going to polish everything when GAT is on stable.
A Self-Refernece Helper (Inspired From Selfie)
this crate provides safe access to its self-reference.
the main idea is not initializing references when object not pinned(which is not safe and makes many self-referenial crate more complex)
providing only pinned reference makes lot more easier to design self-referential object.
on self-reference
crate. you only can initialize reference object that has 'static
lifetime means always safe.
The major difference from other self-referential crate is initializing referential object.
you only can initialize reference object that has 'static
lifetime
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();
The only way to initialize reference object is using reset
method. remember!! you can use reset method when SelfReference
object is pinned.
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"