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
81
82
83
84
85
86
87
use chrono::NaiveDate;
use toml::Value;
use toml_query::set::TomlValueSetExt;
use error::*;
use util::*;
use libimagstore::store::Entry;
use libimagentryutil::isa::Is;
use libimagentryutil::isa::IsKindHeaderPathProvider;
pub trait HabitInstance {
fn is_habit_instance(&self) -> Result<bool>;
fn get_date(&self) -> Result<NaiveDate>;
fn set_date(&mut self, n: &NaiveDate) -> Result<()>;
fn get_comment(&self) -> Result<String>;
fn set_comment(&mut self, c: String) -> Result<()>;
fn get_template_name(&self) -> Result<String>;
}
provide_kindflag_path!(pub IsHabitInstance, "habit.instance.is_habit_instance");
impl HabitInstance for Entry {
fn is_habit_instance(&self) -> Result<bool> {
self.is::<IsHabitInstance>().map_err(From::from)
}
fn get_date(&self) -> Result<NaiveDate> {
use libimagutil::date::date_from_string as dts;
let date_from_string = |d| dts(d).map_err(From::from);
get_string_header_from_entry(self, "habit.instance.date").and_then(date_from_string)
}
fn set_date(&mut self, n: &NaiveDate) -> Result<()> {
use libimagutil::date::date_to_string;
self.get_header_mut()
.set("habit.instance.date", Value::String(date_to_string(n)))
.map_err(From::from)
.map(|_| ())
}
fn get_comment(&self) -> Result<String> {
get_string_header_from_entry(self, "habit.instance.comment")
}
fn set_comment(&mut self, c: String) -> Result<()> {
self.get_header_mut()
.set("habit.instance.comment", Value::String(c))
.map_err(From::from)
.map(|_| ())
}
fn get_template_name(&self) -> Result<String> {
get_string_header_from_entry(self, "habit.instance.name")
}
}