11use jiff:: { civil:: DateTime , tz:: TimeZone , Span , Timestamp , Zoned } ;
22
3- use std:: time:: SystemTime ;
3+ use std:: time:: { Duration , SystemTime , UNIX_EPOCH } ;
44
55/// Filter based on time ranges.
66#[ derive( Debug , PartialEq , Eq ) ]
@@ -22,33 +22,28 @@ thread_local! {
2222/// This allows us to set a specific time when running tests
2323#[ cfg( test) ]
2424fn now ( ) -> Zoned {
25- TESTTIME . with_borrow ( |reftime| reftime. as_ref ( ) . cloned ( ) . unwrap_or_else ( || Zoned :: now ( ) ) )
25+ TESTTIME . with_borrow ( |reftime| reftime. as_ref ( ) . cloned ( ) . unwrap_or_else ( Zoned :: now) )
2626}
2727
2828impl TimeFilter {
2929 fn from_str ( s : & str ) -> Option < SystemTime > {
30- s. parse :: < Span > ( )
31- . and_then ( |duration| now ( ) . checked_sub ( duration) )
32- . ok ( )
33- . or_else ( || {
34- let local_tz = TimeZone :: system ( ) ;
35- s. parse :: < Timestamp > ( )
36- . map ( |ts| ts. to_zoned ( TimeZone :: UTC ) )
37- . ok ( )
38- . or_else ( || {
39- s. parse :: < DateTime > ( )
40- . map ( |dt| local_tz. to_ambiguous_zoned ( dt) )
41- . and_then ( |zdt| zdt. later ( ) )
42- . ok ( )
43- } )
44- . or_else ( || {
45- let timestamp_secs = s. strip_prefix ( '@' ) ?. parse ( ) . ok ( ) ?;
46- Timestamp :: from_second ( timestamp_secs)
47- . map ( |ts| ts. to_zoned ( TimeZone :: UTC ) )
48- . ok ( )
49- } )
50- } )
51- . map ( SystemTime :: from)
30+ if let Ok ( span) = s. parse :: < Span > ( ) {
31+ let datetime = now ( ) . checked_sub ( span) . ok ( ) ?;
32+ Some ( datetime. into ( ) )
33+ } else if let Ok ( timestamp) = s. parse :: < Timestamp > ( ) {
34+ Some ( timestamp. into ( ) )
35+ } else if let Ok ( datetime) = s. parse :: < DateTime > ( ) {
36+ Some (
37+ TimeZone :: system ( )
38+ . to_ambiguous_zoned ( datetime)
39+ . later ( )
40+ . ok ( ) ?
41+ . into ( ) ,
42+ )
43+ } else {
44+ let timestamp_secs: u64 = s. strip_prefix ( '@' ) ?. parse ( ) . ok ( ) ?;
45+ Some ( UNIX_EPOCH + Duration :: from_secs ( timestamp_secs) )
46+ }
5247 }
5348
5449 pub fn before ( s : & str ) -> Option < TimeFilter > {
0 commit comments