#unwrap #unsafe #result #options

no-std unsafe_unwrap

Unsafely unwrap Result and Option types without checking

1 unstable release

Uses old Rust 2015

0.1.0 Jul 12, 2017

#240 in No standard library

Download history 1592/week @ 2023-12-18 747/week @ 2023-12-25 1176/week @ 2024-01-01 2078/week @ 2024-01-08 4691/week @ 2024-01-15 4504/week @ 2024-01-22 5398/week @ 2024-01-29 6254/week @ 2024-02-05 6689/week @ 2024-02-12 7048/week @ 2024-02-19 14947/week @ 2024-02-26 6862/week @ 2024-03-04 5970/week @ 2024-03-11 4422/week @ 2024-03-18 7525/week @ 2024-03-25 4529/week @ 2024-04-01

22,524 downloads per month
Used in 49 crates (8 directly)

MIT/Apache

8KB
87 lines

unsafe_unwrap

A Rust library that enables unchecked unwrapping on Option and Result types.

Usage

The unsafe_unwrap() method can be used anywhere unwrap() is used. It behaves similar to unwrap() in unoptimized builds and will remove checks in optimized builds.

extern crate unsafe_unwrap;
use unsafe_unwrap::UnsafeUnwrap;

let x = Some(42);
let y = unsafe { x.unsafe_unwrap() };

Benchmark

bench_normal_unwrap_1000 bench_unsafe_unwrap_1000
929 ns/iter (+/- 176) 302 ns/iter (+/- 28)

License

This project is released under either:

at your choosing.


lib.rs:

Provides a way to quickly yet unsafely unwrap types whose inner values are known to exist.

By calling unsafe_unwrap(), the compiler is told, in optimized builds, that the unwrap will never fail. In debug builds it will emit a panic.

Sometimes the optimizer can remove checked unwrapping if it can prove that a value exists. However, in times that it may not be able to do so, this works as an alternative.

This is akin to the unsafelyUnwrapped property of Optional in Swift.

Examples

use unsafe_unwrap::UnsafeUnwrap;

let x = Some(20);
let y = unsafe { x.unsafe_unwrap() };

No runtime deps