1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
// SPDX-License-Identifier: Apache-2.0 OR MIT
/*!
<!-- tidy:crate-doc:start -->
Providing wrapper types for safely performing panic-free checked arithmetic
on instants and durations.
This crate provides the following two data structures.
- [`easytime::Instant`] -- A wrapper type for [`std::time::Instant`]
- [`easytime::Duration`] -- A wrapper type for [`std::time::Duration`]
## Usage
Add this to your `Cargo.toml`:
```toml
[dependencies]
easytime = "0.2"
```
*Compiler support: requires rustc 1.58+*
## Examples
```rust
use easytime::{Duration, Instant};
use std::time::Duration as StdDuration;
fn foo(secs: u64, nanos: u32, instant: Instant) -> Option<StdDuration> {
let now = Instant::now();
let dur = Duration::new(secs, nanos);
(now - instant - dur).into_inner()
}
```
If you use [`std::time`] directly, you need to write as follows:
```rust
use std::time::{Duration, Instant};
fn foo(secs: u64, nanos: u32, instant: Instant) -> Option<Duration> {
let now = Instant::now();
let secs = Duration::from_secs(secs);
let nanos = Duration::from_nanos(nanos as u64);
let dur = secs.checked_add(nanos)?;
now.checked_duration_since(instant)?.checked_sub(dur)
}
```
## Optional features
- **`std`** *(enabled by default)*
- Enable to use [`easytime::Instant`].
- If disabled this feature, `easytime` can be used in `no_std` environments.
<!-- tidy:crate-doc:end -->
*/
#![no_std]
#![doc(test(
no_crate_inject,
attr(
deny(warnings, rust_2018_idioms, single_use_lifetimes),
allow(dead_code, unused_variables)
)
))]
#![forbid(unsafe_code)]
#![warn(
// Lints that may help when writing public library.
missing_debug_implementations,
missing_docs,
clippy::alloc_instead_of_core,
clippy::exhaustive_enums,
clippy::exhaustive_structs,
clippy::impl_trait_in_params,
// clippy::missing_inline_in_public_items,
// clippy::std_instead_of_alloc,
clippy::std_instead_of_core,
)]
#![cfg_attr(easytime_doc_cfg, feature(doc_cfg))]
#[cfg(doc)]
extern crate self as easytime;
#[cfg(feature = "std")]
extern crate std;
#[cfg(feature = "std")]
#[cfg(test)]
#[path = "gen/assert_impl.rs"]
mod assert_impl;
#[macro_use]
mod utils;
mod duration;
pub use crate::duration::Duration;
#[cfg(feature = "std")]
mod instant;
#[cfg(feature = "std")]
pub use crate::instant::Instant;
mod error;
pub use crate::error::TryFromTimeError;