aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/habit.rs15
1 files changed, 14 insertions, 1 deletions
diff --git a/src/habit.rs b/src/habit.rs
index 4f05217..88e1cb6 100644
--- a/src/habit.rs
+++ b/src/habit.rs
@@ -6,16 +6,18 @@ use chrono::NaiveDate;
6pub struct Habit<T> { 6pub struct Habit<T> {
7 name: String, 7 name: String,
8 stats: HashMap<NaiveDate, T>, 8 stats: HashMap<NaiveDate, T>,
9 goal: T,
9} 10}
10 11
11impl<T> Habit<T> 12impl<T> Habit<T>
12where 13where
13 T: Copy, 14 T: Copy,
14{ 15{
15 pub fn new(name: &str) -> Habit<T> { 16 pub fn new(name: &str, goal: T) -> Habit<T> {
16 return Habit { 17 return Habit {
17 name: name.to_owned(), 18 name: name.to_owned(),
18 stats: HashMap::new(), 19 stats: HashMap::new(),
20 goal,
19 }; 21 };
20 } 22 }
21 23
@@ -40,6 +42,9 @@ impl Habit<bool> {
40 self.insert_entry(date, true); 42 self.insert_entry(date, true);
41 } 43 }
42 } 44 }
45 pub fn reached_goal(&self, date: NaiveDate) -> bool {
46 *self.get_by_date(date).unwrap_or(&false)
47 }
43} 48}
44 49
45impl Habit<u32> { 50impl Habit<u32> {
@@ -60,4 +65,12 @@ impl Habit<u32> {
60 pub fn set(&mut self, date: NaiveDate, val: u32) { 65 pub fn set(&mut self, date: NaiveDate, val: u32) {
61 *self.stats.entry(date).or_insert(val) = val; 66 *self.stats.entry(date).or_insert(val) = val;
62 } 67 }
68 pub fn reached_goal(&self, date: NaiveDate) -> bool {
69 if let Some(v) = self.get_by_date(date) {
70 if *v >= self.goal {
71 return true;
72 }
73 }
74 return false;
75 }
63} 76}