ref_wrapper

Crates.ioref_wrapper
lib.rsref_wrapper
version0.3.0
sourcesrc
created_at2023-04-06 03:37:47.270339
updated_at2024-11-25 18:38:38.96571
descriptionWrapper of dynamically borrowed data.
homepage
repositoryhttps://github.com/nossie531/ref_wrapper
max_upload_size
id831909
size24,266
(nossie531)

documentation

README

ref_wrapper

Wrapper of dynamically borrowed data.

The author of this crate is not good at English.
Forgive me if the document is hard to read.

⚠ Warning!!!

This crate is not recommended.

Because we found unsafe misuse in this crate. Specifically, references obtained though RefWrap become dangling references after the RefWrap destroyed.

Instead, we create ref_iter Crate.
However, this one targets only iterators.

What is this?

This crate provide wrappers for value generated from dynamic borrowing types.

Wrapper Target
RefWrap Ref
RefWrapMut RefMut

Examples

Normal use case.

let src = RefCell::new(vec![1, 2, 3]);
let target = RefWrap::new(src.borrow(), |x| VecStat(x));
assert_eq!(target.summary(), 6);

pub struct VecStat<'a>(&'a Vec<i32>);
impl<'a> VecStat<'a> {
    pub fn summary(&self) -> i32 {
        self.0.iter().sum::<i32>()
    }
}

Iterator use case.

let src = RefCell::new(vec![1, 2, 3]);
let iter = RefWrap::new(src.borrow(), |x| x.iter());
assert_eq!(iter.sum::<i32>(), 6);

What's new.

v0.3.0

  • Notice of non-recommendation.

v0.2.2

  • Remove unused lifetime constraint of RefIter::new and RefIterMut::new.
  • Minor refactoring.

v0.2.1

  • Minor refactoring.

v0.2.0

  • Crate is now no_std.
  • new method callback argument returns no longer need to wrapped in Box.
  • RefWrap and RefWrapMut implement Iterator in certain cases.
  • Instead of the above, RefIter and RefIterMut have been removed.

v0.1.3-0.1.5

  • Minor refactoring.

v0.1.2

  • Some internal function is inlined.
Commit count: 11

cargo fmt