1use std::time::SystemTime;
4
5use crate::priority::Priority;
6use crate::repeat::RepeatRule;
7
8#[derive(Clone, Eq, PartialEq)]
10pub struct Todo {
11 pub id: crate::id::TodoId,
12 pub title: String,
13 pub completed: bool,
14 pub created_at: SystemTime,
15 pub completed_at: Option<SystemTime>,
17 pub description: Option<String>,
19 pub due_date: Option<String>,
21 pub priority: Option<Priority>,
23 pub tags: Vec<String>,
25 pub repeat_rule: Option<RepeatRule>,
27 pub repeat_until: Option<String>,
29 pub repeat_count: Option<u32>,
31}
32
33#[derive(Clone, Default)]
36pub struct TodoPatch {
37 pub title: Option<String>,
38 pub description: Option<String>,
39 pub due_date: Option<String>,
40 pub priority: Option<Priority>,
41 pub tags: Option<Vec<String>>,
42 pub repeat_rule: Option<RepeatRule>,
43 pub repeat_until: Option<String>,
44 pub repeat_count: Option<u32>,
45 pub repeat_rule_clear: bool,
47}
48
49#[derive(Clone, Default)]
51pub struct ListFilter {
52 pub status: Option<bool>,
54 pub priority: Option<Priority>,
56 pub tags_any: Option<Vec<String>>,
58 pub due_before: Option<String>,
60 pub due_after: Option<String>,
62}
63
64#[derive(Clone, Copy, Default)]
66pub enum ListSort {
67 #[default]
68 CreatedAt,
69 DueDate,
70 Priority,
71 Title,
72}
73
74#[derive(Clone, Default)]
76pub struct ListOptions {
77 pub filter: Option<ListFilter>,
78 pub sort: ListSort,
79}