1#[cfg(feature = "extended")]
2mod extended;
3mod list;
4#[cfg(feature = "extended")]
5mod note;
6#[cfg(feature = "extended")]
7mod period;
8#[cfg(feature = "extended")]
9mod recurrence;
10mod simple;
11
12#[cfg(feature = "extended")]
13pub use extended::Extended;
14pub use list::List;
15#[cfg(feature = "extended")]
16pub use note::Note;
17#[cfg(feature = "extended")]
18pub use period::Period;
19#[cfg(feature = "extended")]
20pub use recurrence::Recurrence;
21pub use simple::Simple;
22
23pub trait Task: From<String> + ToString + Clone + Default + AsRef<Simple> {}
24
25impl Task for Simple {}
26
27#[cfg(feature = "extended")]
28impl Task for Extended {}
29
30#[derive(Clone, Copy, Debug)]
31pub(crate) enum Tag {
32 Context,
33 Project,
34 Hashtag,
35}
36
37impl std::fmt::Display for Tag {
38 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
39 let s = match self {
40 Self::Context => "@",
41 Self::Project => "+",
42 Self::Hashtag => "#",
43 };
44
45 f.write_str(s)
46 }
47}