19
19
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
20
20
// DEALINGS IN THE SOFTWARE.
21
21
22
- #![ cfg( all( target_arch = "wasm32" , target_os = "unknown" ) ) ]
23
-
24
- use std:: cmp:: { Eq , PartialEq , Ord , PartialOrd , Ordering } ;
25
- use std:: ops:: { Add , Sub , AddAssign , SubAssign } ;
22
+ use std:: cmp:: { Eq , Ord , Ordering , PartialEq , PartialOrd } ;
23
+ use std:: ops:: { Add , AddAssign , Sub , SubAssign } ;
26
24
use std:: time:: Duration ;
27
25
28
26
#[ derive( Debug , Copy , Clone ) ]
@@ -77,7 +75,9 @@ impl Add<Duration> for Instant {
77
75
78
76
fn add ( self , other : Duration ) -> Instant {
79
77
let new_val = self . inner + other. as_millis ( ) as f64 ;
80
- Instant { inner : new_val as f64 }
78
+ Instant {
79
+ inner : new_val as f64 ,
80
+ }
81
81
}
82
82
}
83
83
@@ -86,7 +86,9 @@ impl Sub<Duration> for Instant {
86
86
87
87
fn sub ( self , other : Duration ) -> Instant {
88
88
let new_val = self . inner - other. as_millis ( ) as f64 ;
89
- Instant { inner : new_val as f64 }
89
+ Instant {
90
+ inner : new_val as f64 ,
91
+ }
90
92
}
91
93
}
92
94
@@ -108,6 +110,14 @@ pub struct SystemTime {
108
110
inner : f64 ,
109
111
}
110
112
113
+ pub struct SystemTimeError ( Duration ) ;
114
+
115
+ impl SystemTimeError {
116
+ pub fn duration ( & self ) -> Duration {
117
+ self . 0
118
+ }
119
+ }
120
+
111
121
impl PartialEq for SystemTime {
112
122
fn eq ( & self , other : & SystemTime ) -> bool {
113
123
// Note that this will most likely only compare equal if we clone an `SystemTime`,
@@ -138,16 +148,16 @@ impl SystemTime {
138
148
SystemTime { inner : val }
139
149
}
140
150
141
- pub fn duration_since ( & self , earlier : SystemTime ) -> Result < Duration , ( ) > {
151
+ pub fn duration_since ( & self , earlier : SystemTime ) -> Result < Duration , SystemTimeError > {
142
152
let dur_ms = self . inner - earlier. inner ;
143
153
if dur_ms < 0.0 {
144
- return Err ( ( ) )
154
+ return Err ( SystemTimeError ( Duration :: from_millis ( dur_ms . abs ( ) as u64 ) ) ) ;
145
155
}
146
156
Ok ( Duration :: from_millis ( dur_ms as u64 ) )
147
157
}
148
158
149
- pub fn elapsed ( & self ) -> Result < Duration , ( ) > {
150
- self . duration_since ( SystemTime :: now ( ) )
159
+ pub fn elapsed ( & self ) -> Result < Duration , SystemTimeError > {
160
+ SystemTime :: now ( ) . duration_since ( * self )
151
161
}
152
162
153
163
pub fn checked_add ( & self , duration : Duration ) -> Option < SystemTime > {
@@ -164,7 +174,9 @@ impl Add<Duration> for SystemTime {
164
174
165
175
fn add ( self , other : Duration ) -> SystemTime {
166
176
let new_val = self . inner + other. as_millis ( ) as f64 ;
167
- SystemTime { inner : new_val as f64 }
177
+ SystemTime {
178
+ inner : new_val as f64 ,
179
+ }
168
180
}
169
181
}
170
182
@@ -173,7 +185,9 @@ impl Sub<Duration> for SystemTime {
173
185
174
186
fn sub ( self , other : Duration ) -> SystemTime {
175
187
let new_val = self . inner - other. as_millis ( ) as f64 ;
176
- SystemTime { inner : new_val as f64 }
188
+ SystemTime {
189
+ inner : new_val as f64 ,
190
+ }
177
191
}
178
192
}
179
193
0 commit comments