boxext

Extensions to the Box type

This crate provides extra initializer methods for Box, working around the current (as of writing) shortcomings from Box::new:

Both can be worked around with some contortion but with caveats. This crate provides helpers doing those contortions for you, but can't deal with the caveats. Those caveats are essentially the same as why the unstable placement features were removed in nightly 1.27, namely that there are no guarantees that things will actually happen in place (and they don't in debug builds).

The crates adds the following helper methods to the Box type:

Examples

```rust extern crate boxext; use boxext::BoxExt;

struct Foo(usize, usize);

impl Foo { fn new(a: usize, b: usize) -> Self { Foo(a, b) } }

impl Default for Foo { fn default() -> Self { Foo::new(0, 1) } }

fn main() { // equivalent to Box::new(Foo(1, 2)) let buf = Box::new_with(|| Foo(1, 2));

// equivalent to `Box::new(Foo::new(2, 3))`
let buf = Box::new_with(|| Foo::new(2, 3));

// equivalent to `Box::new(Foo::default())`
let buf = Box::new_with(Foo::default);

// equivalent to `Box::new([0usize; 64])`
let buf: Box<[usize; 64]> = Box::new_zeroed();

} ```

Features

License: Apache-2.0/MIT