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()
    }
}