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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
//! Monotonic clock readings.
//!
//! Monotonic time never goes backwards. It is the right tool for measuring
//! elapsed time: rate limiting, timeouts, benchmarks, retry backoff. The
//! absolute value of a [`Monotonic`] reading carries no calendar meaning —
//! it is only useful as a delta against another [`Monotonic`] from the same
//! process.
//!
//! For calendar timestamps, use [`Wall`](crate::Wall) instead.
use Instant;
/// A captured monotonic instant.
///
/// `Monotonic` wraps a single sample of the operating system's monotonic
/// clock. Two readings can be compared to recover the [`Duration`] between
/// them with [`duration_since`](Monotonic::duration_since) or the safer
/// [`checked_duration_since`](Monotonic::checked_duration_since).
///
/// `Monotonic` and [`Wall`](crate::Wall) are deliberately distinct types
/// with no cross-type arithmetic. The compiler will reject any attempt to
/// mix them — that separation is the central design choice of this crate.
///
/// Construct one with [`Monotonic::now`] or the crate-level
/// [`now`](crate::now) shortcut.
///
/// [`Duration`]: core::time::Duration
///
/// # Examples
///
/// ```
/// use clock_lib::Monotonic;
///
/// let start = Monotonic::now();
/// // ... do some work ...
/// let took = start.elapsed();
/// assert!(took.as_nanos() < u128::MAX);
/// ```
Instant);