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
use chrono::{DateTime, Utc};
use entities::anniversary::Anniversary;
use crate::date_service::DateService;
mod date_service;
pub mod entities;
const FUN_ANNIVERSARIES_COUNT: [i64; 44] = [
42,
314,
12345,
123456,
1234567,
12345678,
123456789,
9876543210,
876543210,
76543210,
6543210,
543210,
100,
1000,
10000,
100000,
1000000,
10000000,
100000000,
1000000000,
10000000000,
100000000000,
1000000000000,
111,
1111,
11111,
111111,
1111111,
11111111,
111111111,
1111111111,
11111111111,
111111111111,
1111111111111,
11111111111111,
333,
4444,
55555,
666,
666666,
777,
7777777,
88888888,
999999999,
];
pub fn find_anniversaries_future(date_str: &str) -> Vec<Anniversary> {
find_anniversaries(date_str, Some(false))
}
pub fn find_anniversaries_past(date_str: &str) -> Vec<Anniversary> {
find_anniversaries(date_str, Some(true))
}
pub fn find_anniversaries_all(date_str: &str) -> Vec<Anniversary> {
find_anniversaries(date_str, None)
}
fn find_anniversaries(date_str: &str, is_past: Option<bool>) -> Vec<Anniversary> {
let now: DateTime<Utc> = Utc::now();
let date_service = DateService {
now,
fun_anniversaries_count: FUN_ANNIVERSARIES_COUNT.to_vec(),
};
let date = DateTime::parse_from_rfc3339(date_str);
match date {
Ok(d) => date_service.find_anniversaries_from_date(d.with_timezone(&Utc), is_past),
Err(e) => panic!("error converting date: {}", e),
}
}