# raw-parts
[](https://github.com/artichoke/raw-parts/actions)
[](https://codecov.artichokeruby.org/raw-parts/index.html)
[](https://twitter.com/artichokeruby)
<br>
[](https://crates.io/crates/raw-parts)
[](https://docs.rs/raw-parts)
[](https://artichoke.github.io/raw-parts/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`:
```toml
[dependencies]
raw-parts = "2.2.3"
```
Then decompose `Vec<T>`s like:
```rust
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](LICENSE) (c) Ryan Lopopolo.
[`vec::from_raw_parts`]:
https://doc.rust-lang.org/alloc/vec/struct.Vec.html#method.from_raw_parts
[`vec::into_raw_parts`]:
https://doc.rust-lang.org/alloc/vec/struct.Vec.html#method.into_raw_parts
[`alloc`]: https://doc.rust-lang.org/alloc/