| Crates.io | raw-parts |
| lib.rs | raw-parts |
| version | 2.2.0 |
| created_at | 2021-11-14 16:49:53.575188+00 |
| updated_at | 2024-12-08 22:20:37.294957+00 |
| description | Ergonomic wrapper around `Vec::from_raw_parts` and `Vec::into_raw_parts`. |
| homepage | https://github.com/artichoke/raw-parts |
| repository | https://github.com/artichoke/raw-parts |
| max_upload_size | |
| id | 481781 |
| size | 24,733 |
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.
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_stdraw-parts is no_std compatible with a required dependency on alloc.
This crate requires at least Rust 1.76.0. This version can be bumped in minor releases.
raw-parts is licensed under the MIT License (c) Ryan Lopopolo.