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
use serde::{Deserialize, Serialize};
use crate::reg;
use crate::github::event::GithubEvent;
use rand;
#[derive(Deserialize, Serialize, Default, Clone)]
pub struct TimeSpent {
user: String,
login: String,
value: f32,
id: u64,
wp_formatted_id: Option<String>,
repo_name: String,
pr_number: u64,
}
impl TimeSpent {
pub fn get_id(&self) -> u64 {
self.id
}
pub fn is_valid(&self) -> bool {
self.wp_formatted_id.is_some()
}
pub fn get_repo(&self) -> &str{
&self.repo_name
}
pub fn get_pr_number(&self) -> u64 {
self.pr_number
}
}
pub fn get_time_spent_from_str(s: &str, event: &GithubEvent) -> TimeSpent {
let pat = reg!(r"(T|t)hanks\s(?P<t>(\d{1})|(\d\.\d{1,3}))!");
let user = event.get_user_name();
let k = rand::random::<u64>();
let wp = event.get_work_product();
if let Some(m) = pat.captures(s) {
if let Some(n) = m.name("t") {
return TimeSpent {
user,
login: event.get_login_name().to_string(),
value: n.as_str().parse().unwrap(),
id: k,
wp_formatted_id:wp,
repo_name: event.get_repo_name().to_string(),
pr_number: event.get_pr_number()
}
}
}
TimeSpent {
user,
login: event.get_login_name().to_string(),
value: 0.5,
id: k,
wp_formatted_id:wp,
repo_name: event.get_repo_name().to_string(),
pr_number: event.get_pr_number()
}
}