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
1,095 downloads per month
Used in 5 crates
(3 directly)
24KB
267 lines
raw-parts
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.