#raw-pointers #vec #unsafe #ffi #vector

no-std raw-parts

Ergonomic wrapper around Vec::from_raw_parts and Vec::into_raw_parts

9 stable releases

new 2.2.0 Dec 8, 2024
2.1.0 Jul 11, 2024
2.0.0 May 31, 2023
1.1.2 Aug 8, 2022
1.0.2 Nov 19, 2021

#246 in Rust patterns

Download history 211/week @ 2024-08-21 322/week @ 2024-08-28 293/week @ 2024-09-04 319/week @ 2024-09-11 305/week @ 2024-09-18 625/week @ 2024-09-25 588/week @ 2024-10-02 278/week @ 2024-10-09 265/week @ 2024-10-16 323/week @ 2024-10-23 326/week @ 2024-10-30 174/week @ 2024-11-06 287/week @ 2024-11-13 185/week @ 2024-11-20 283/week @ 2024-11-27 298/week @ 2024-12-04

1,095 downloads per month
Used in 5 crates (3 directly)

MIT license

24KB
267 lines

raw-parts

GitHub Actions Code Coverage 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:

[dependencies]
raw-parts = "2.2.0"

Then decompose Vec<T>s like:

use raw_parts::RawParts;

let v: Vec<i32> = 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 };

    raw_parts.into_vec()
};
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.76.0. This version can be bumped in minor releases.

License

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

No runtime deps