raw-parts

GitHub Actions Discord Twitter
Crate API API trunk

A wrapper around the decomposed parts of a Vec<T>.

This struct contains the Vec's internal pointer, length, and allocated capacity.

RawParts makes [Vec::from_raw_parts] and [Vec::into_raw_parts] easier to use by giving names to the returned values. This prevents errors from mixing up the two usize values of length and capacity.

Usage

Add this to your Cargo.toml:

toml [dependencies] raw-parts = "1.1"

Then decompose Vec<T>s like:

```rust use raw_parts::RawParts;

let v: Vec = vec![-1, 0, 1];

let RawParts { ptr, length, capacity } = RawParts::from_vec(v);

let rebuilt = unsafe { // We can now make changes to the components, such as // transmuting the raw pointer to a compatible type. let ptr = ptr as *mut u32; let raw_parts = RawParts { ptr, length, capacity };

RawParts::into_vec(raw_parts)

}; assert_eq!(rebuilt, [4294967295, 0, 1]); ```

no_std

raw-parts is no_std compatible with a required dependency on [alloc].

Minimum Supported Rust Version

This crate requires at least Rust 1.56.0. This version can be bumped in minor releases.

License

raw-parts is licensed under the MIT License (c) Ryan Lopopolo.