File tree 2 files changed +35
-2
lines changed
2 files changed +35
-2
lines changed Original file line number Diff line number Diff line change 1
- use chrono:: prelude:: * ;
2
1
use crate :: moment:: { date, time} ;
2
+ use chrono:: prelude:: * ;
3
3
use itertools:: Itertools ;
4
4
5
5
pub fn parse ( s : & str ) -> Option < Vec < DateTime < Local > > > {
Original file line number Diff line number Diff line change 1
1
use chrono:: prelude:: * ;
2
2
3
3
pub fn parse ( s : & str ) -> Option < Vec < DateTime < Local > > > {
4
+ type TryTimestamp = fn ( & str ) -> Option < DateTime < Local > > ;
5
+ let parses: Vec < TryTimestamp > = vec ! [ parse_sec, parse_ms, parse_float_sec] ;
6
+ for p in parses {
7
+ if let Some ( t) = p ( s) {
8
+ return Some ( vec ! [ t] ) ;
9
+ }
10
+ }
11
+ None
12
+ }
13
+
14
+ fn parse_sec ( s : & str ) -> Option < DateTime < Local > > {
4
15
let sec = s. parse ( ) . ok ( ) ?;
5
16
let t = Local . timestamp ( sec, 0 ) ;
6
17
7
18
if 2010 <= t. year ( ) && t. year ( ) <= 2030 {
8
- Some ( vec ! [ t] )
19
+ Some ( t)
20
+ } else {
21
+ None
22
+ }
23
+ }
24
+
25
+ fn parse_ms ( s : & str ) -> Option < DateTime < Local > > {
26
+ let ms: i64 = s. parse ( ) . ok ( ) ?;
27
+ let t = Local . timestamp ( ms / 1000 , ms as u32 % 1000 ) ;
28
+
29
+ if 2010 <= t. year ( ) && t. year ( ) <= 2030 {
30
+ Some ( t)
31
+ } else {
32
+ None
33
+ }
34
+ }
35
+
36
+ fn parse_float_sec ( s : & str ) -> Option < DateTime < Local > > {
37
+ let sec: f64 = s. parse ( ) . ok ( ) ?;
38
+ let t = Local . timestamp ( sec as i64 , 0 ) ;
39
+
40
+ if 2010 <= t. year ( ) && t. year ( ) <= 2030 {
41
+ Some ( t)
9
42
} else {
10
43
None
11
44
}
You can’t perform that action at this time.
0 commit comments