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
use super::{ Time, TimeConversion };

#[derive(TimeConversion)]
pub struct TimeBuilder {
    hours:        u64,
    minutes:      u64,
    seconds:      u64,
    milliseconds: u64,
    nanoseconds:  u64,
}

impl TimeBuilder {
    pub fn new() -> Self {
        Self { hours: 0, minutes: 0, seconds: 0, milliseconds: 0, nanoseconds: 0 }
    }

    pub fn hours(mut self, hours: u64) -> Self {
        self.hours = 0;
        self.add_hours(hours);
        self
    }

    pub fn minutes(mut self, minutes: u64) -> Self {
        self.minutes = 0;
        self.add_minutes(minutes);
        self
    }

    pub fn seconds(mut self, seconds: u64) -> Self {
        self.seconds = 0;
        self.add_seconds(seconds);
        self
    }

    pub fn milliseconds(mut self, milliseconds: u64) -> Self {
        self.milliseconds = 0;
        self.add_milliseconds(milliseconds);
        self
    }

    pub fn nanoseconds(mut self, nanoseconds: u64) -> Self {
        self.nanoseconds = 0;
        self.add_nanoseconds(nanoseconds);
        self
    }

    pub fn build(self) -> Time {
        Time::new(
            self.hours,
            self.minutes,
            self.seconds,
            self.milliseconds,
            self.nanoseconds
        )
    }
}

#[cfg(test)]
mod tests;