Expand description
Stable, no_std-compatible, fallible heap allocation for Box.
Basic usage is as follows:
match trybox::new(1) {
Ok(heaped) => {
let _: Box<i32> = heaped;
}
Err(ErrorWith(stacked)) => {
let _: i32 = stacked; // failed object is returned on the stack
},
}You may drop the object after allocation failure instead,
choosing to e.g propogate or wrap the Error.
fn fallible<T>(x: T) -> Result<Box<T>, Box<dyn std::error::Error + Send + Sync>> {
Ok(trybox::or_drop(x)?)
}Care has been taken to optimize the size of Error down to a single usize:
assert_eq!(size_of::<trybox::Error>(), size_of::<usize>());And to provide ergonomic error messages:
memory allocation of 4 bytes (for type i32) failedmemory allocation of 2.44 kibibytes (for type [u8; 2500]) failedConversions to std::io::Error and std::io::ErrorKind::OutOfMemory
are provided when the "std" feature is enabled:
fn fallible<T>(x: T) -> std::io::Result<Box<T>> {
Ok(trybox::or_drop(x)?)
}§Comparison with other crates
fallacy-boxfallible_collections- You must use either the
TryBoxwrapper struct, or theFallibleBoxextension trait. - The returned error type doesn’t implement common error traits, and isn’t strictly minimal.
- You must use either the
Structs§
- Error
- Represents an allocation failure from
or_drop. - Error
With - Represents the failure to allocate a particular object on the heap,
returned from
new.