diwic / reffers-rs

Rust wrappers around references, boxes and Arcs.
68 stars 3 forks source link

Assorted smart pointers for Rust.

API Docs

Crates.io

Features:

Strong / Weak / Ref / RefMut

This is like Rc<RefCell<T>>, but with slightly different trade-offs:

There is also a thread-safe version which is something like an Arc<RwSpinlock<T>>.

ARef

ARef takes over where OwningRef ends, by abstracting the owner even further.

This makes it possible to return, say, an ARef<str> and have the caller drop the owner when done looking at it, without having to bother about whether the owner is a String, Rc<String>, a Ref<String>, a simple &'static str or something else.

It's also repr(C), so it can be transferred over an FFI boundary (if its target is repr(C), too).

RMBA

The RMBA wraps either a &T, &mut T, Box<T> or Arc<T> within the size of a single pointer.

It will panic if you try to store a struct that's not 32 bit aligned.

Bx, Bxm

These are just simple wrappers around Box that lets you get rid of DerefMove.

This way you can return a Bx in your API and still be sure the inner struct does not move in memory. (This might be helpful if you're dealing with FFI or unsafe code.)

License

Apache 2.0 or MIT, at your preference.