# raw-parts [![GitHub Actions](https://github.com/artichoke/raw-parts/workflows/CI/badge.svg)](https://github.com/artichoke/raw-parts/actions) [![Code Coverage](https://codecov.artichokeruby.org/raw-parts/badges/flat.svg?nocache=2)](https://codecov.artichokeruby.org/raw-parts/index.html) [![Discord](https://img.shields.io/discord/607683947496734760)](https://discord.gg/QCe2tp2) [![Twitter](https://img.shields.io/twitter/follow/artichokeruby?label=Follow&style=social)](https://twitter.com/artichokeruby)
[![Crate](https://img.shields.io/crates/v/raw-parts.svg)](https://crates.io/crates/raw-parts) [![API](https://docs.rs/raw-parts/badge.svg)](https://docs.rs/raw-parts) [![API trunk](https://img.shields.io/badge/docs-trunk-blue.svg)](https://artichoke.github.io/raw-parts/raw_parts/) A wrapper around the decomposed parts of a `Vec`. 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.1.0" ``` Then decompose `Vec`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 }; 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.56.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/