38 lines
1,006 B
Rust
38 lines
1,006 B
Rust
// Copyright 2016 Amanieu d'Antras
|
|
//
|
|
// Licensed under the Apache License, Version 2.0, <LICENSE-APACHE or
|
|
// http://apache.org/licenses/LICENSE-2.0> or the MIT license <LICENSE-MIT or
|
|
// http://opensource.org/licenses/MIT>, at your option. This file may not be
|
|
// copied, modified, or distributed except according to those terms.
|
|
|
|
use std::time::{Duration, Instant};
|
|
|
|
// Option::unchecked_unwrap
|
|
pub trait UncheckedOptionExt<T> {
|
|
unsafe fn unchecked_unwrap(self) -> T;
|
|
}
|
|
|
|
impl<T> UncheckedOptionExt<T> for Option<T> {
|
|
#[inline]
|
|
unsafe fn unchecked_unwrap(self) -> T {
|
|
match self {
|
|
Some(x) => x,
|
|
None => unreachable(),
|
|
}
|
|
}
|
|
}
|
|
|
|
// hint::unreachable_unchecked() in release mode
|
|
#[inline]
|
|
unsafe fn unreachable() -> ! {
|
|
if cfg!(debug_assertions) {
|
|
unreachable!();
|
|
} else {
|
|
core::hint::unreachable_unchecked()
|
|
}
|
|
}
|
|
|
|
#[inline]
|
|
pub fn to_deadline(timeout: Duration) -> Option<Instant> {
|
|
Instant::now().checked_add(timeout)
|
|
}
|