ccl_owning_ref

Crates.ioccl_owning_ref
lib.rsccl_owning_ref
version0.4.2
sourcesrc
created_at2019-06-19 18:00:29.875998
updated_at2019-07-16 12:37:47.939757
descriptionA library for creating references that carry their owner with them.
homepage
repositoryhttps://gitlab.nebulanet.cc/xacrimon/ccl
max_upload_size
id142146
size66,703
Joel (xacrimon)

documentation

http://kimundi.github.io/owning-ref-rs/owning_ref/index.html

README

This is a fork of the original crate to enable some specific functionality. Contact me for questions or requests.

owning-ref-rs

A library for creating references that carry their owner with them.

This can sometimes be useful because Rust borrowing rules normally prevent moving a type that has been borrowed from. For example, this kind of code gets rejected:

fn return_owned_and_referenced<'a>() -> (Vec<u8>, &'a [u8]) {
    let v = vec![1, 2, 3, 4];
    let s = &v[1..3];
    (v, s)
}

This library enables this safe usage by keeping the owner and the reference bundled together in a wrapper type that ensure that lifetime constraint:

fn return_owned_and_referenced() -> OwningRef<Vec<u8>, [u8]> {
    let v = vec![1, 2, 3, 4];
    let or = OwningRef::new(v);
    let or = or.map(|v| &v[1..3]);
    or
}

Travis-CI Status

Getting Started

owning-ref-rs is available on crates.io. It is recommended to look there for the newest released version, as well as links to the newest builds of the docs.

At the point of the last update of this README, the latest published version could be used like this:

Add the following dependency to your Cargo manifest...

[dependencies]
owning_ref = "0.3"

...and see the docs for how to use it.

Example

extern crate owning_ref;
use owning_ref::BoxRef;

fn main() {
    // Create an array owned by a Box.
    let arr = Box::new([1, 2, 3, 4]) as Box<[i32]>;

    // Transfer into a BoxRef.
    let arr: BoxRef<[i32]> = BoxRef::new(arr);
    assert_eq!(&*arr, &[1, 2, 3, 4]);

    // We can slice the array without losing ownership or changing type.
    let arr: BoxRef<[i32]> = arr.map(|arr| &arr[1..3]);
    assert_eq!(&*arr, &[2, 3]);

    // Also works for Arc, Rc, String and Vec!
}
Commit count: 0

cargo fmt