[][src]Crate unchecked_unwrap


Crates.io Libraries.io Commits since License LoC

Release: Build Docs

Master: Build Docs

Table of contents


Adds an unchecked version of unwrap() and expect() to Option and Result for the rust programming language. Supports no_std.


  • release - For releases only.
  • master - For active development, PR's and testing.


use unchecked_unwrap::UncheckedUnwrap;

let x = Some("air");
assert_eq!(unsafe { x.unchecked_unwrap() }, "air");

let x: Result<u32, &str> = Ok(2);
assert_eq!(unsafe { x.unchecked_unwrap() }, 2);

let x = Some("value");
assert_eq!(unsafe { x.unchecked_expect("the world is ending") }, "value");

let x: Result<u32, &str> = Ok(2);
assert_eq!(unsafe { x.unchecked_expect("the sky is falling down") }, 2);
checked unchecked
fn test_checked(value: Option<&str>) -> &str {
fn test_unchecked(value: Option<&str>) -> &str {
    unsafe { value.unchecked_unwrap() }
push    rax
test    rdi, rdi
je      .LBB2_1       // panic handler
mov     rdx, rsi
mov     rax, rdi
pop     rcx
mov     rdx, rsi
mov     rax, rdi

Crate features

  • debug_checks - On by default. Enables the normal checking behavior with panics when cfg(debug-assertions) is enabled.
  • nightly


Documentation is available online in the badge links above. Currently, nightly is needed for full documentation: cargo doc --features nightly If you are not using nightly, use cargo doc as usual.


Is as simple as cargo test and cargo test --release.


Is as simple as cargo bench. Currently the nightly version of rust and the feature = "nightly" is needed for benchmarking.

A sample result from the CI running on Github Actions:

test checked::expect_option   ... bench:         798 ns/iter (+/- 90)
test checked::expect_result   ... bench:         724 ns/iter (+/- 109)
test checked::unwrap_option   ... bench:         802 ns/iter (+/- 52)
test checked::unwrap_result   ... bench:         743 ns/iter (+/- 176)
test unchecked::expect_option ... bench:         407 ns/iter (+/- 93)
test unchecked::expect_result ... bench:         374 ns/iter (+/- 48)
test unchecked::unwrap_option ... bench:         345 ns/iter (+/- 53)
test unchecked::unwrap_result ... bench:         407 ns/iter (+/- 22)


Both alternatives and this crate are quite the same except that this crate provides additional features that can be toggled with cargo features. See crate features for details.


See the CHANGELOG file for details


Licensed under either of

at your option.


Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.



Trait for unchecked_expect and unchecked_unwrap.