1use clap::ValueEnum;
16
17use crate::contracts::{TaskPriority, TaskStatus};
18use crate::queue::TaskEditKey;
19
20#[derive(ValueEnum, Clone, Copy, Debug, Default)]
22#[clap(rename_all = "snake_case")]
23pub enum BatchMode {
24 #[default]
26 Auto,
27 Never,
29 Aggressive,
31}
32
33#[derive(clap::ValueEnum, Clone, Copy, Debug, PartialEq, Eq)]
35#[clap(rename_all = "snake_case")]
36pub enum TaskPriorityArg {
37 Critical,
38 High,
39 Medium,
40 Low,
41}
42
43impl From<TaskPriorityArg> for TaskPriority {
44 fn from(value: TaskPriorityArg) -> Self {
45 match value {
46 TaskPriorityArg::Critical => TaskPriority::Critical,
47 TaskPriorityArg::High => TaskPriority::High,
48 TaskPriorityArg::Medium => TaskPriority::Medium,
49 TaskPriorityArg::Low => TaskPriority::Low,
50 }
51 }
52}
53
54#[derive(clap::ValueEnum, Clone, Copy, Debug, PartialEq)]
56#[clap(rename_all = "snake_case")]
57pub enum TaskStatusArg {
58 Draft,
60 Todo,
62 Doing,
64 Done,
66 Rejected,
68}
69
70impl From<TaskStatusArg> for TaskStatus {
71 fn from(value: TaskStatusArg) -> Self {
72 match value {
73 TaskStatusArg::Draft => TaskStatus::Draft,
74 TaskStatusArg::Todo => TaskStatus::Todo,
75 TaskStatusArg::Doing => TaskStatus::Doing,
76 TaskStatusArg::Done => TaskStatus::Done,
77 TaskStatusArg::Rejected => TaskStatus::Rejected,
78 }
79 }
80}
81
82#[derive(ValueEnum, Clone, Copy, Debug, PartialEq)]
84#[clap(rename_all = "snake_case")]
85pub enum TaskEditFieldArg {
86 Title,
87 Status,
88 Priority,
89 Tags,
90 Scope,
91 Evidence,
92 Plan,
93 Notes,
94 Request,
95 DependsOn,
96 Blocks,
97 RelatesTo,
98 Duplicates,
99 CustomFields,
100 Agent,
101 CreatedAt,
102 UpdatedAt,
103 CompletedAt,
104 StartedAt,
105 ScheduledStart,
106 EstimatedMinutes,
107 ActualMinutes,
108}
109
110impl TaskEditFieldArg {
111 pub fn as_str(self) -> &'static str {
112 match self {
113 TaskEditFieldArg::Title => "title",
114 TaskEditFieldArg::Status => "status",
115 TaskEditFieldArg::Priority => "priority",
116 TaskEditFieldArg::Tags => "tags",
117 TaskEditFieldArg::Scope => "scope",
118 TaskEditFieldArg::Evidence => "evidence",
119 TaskEditFieldArg::Plan => "plan",
120 TaskEditFieldArg::Notes => "notes",
121 TaskEditFieldArg::Request => "request",
122 TaskEditFieldArg::DependsOn => "depends_on",
123 TaskEditFieldArg::Blocks => "blocks",
124 TaskEditFieldArg::RelatesTo => "relates_to",
125 TaskEditFieldArg::Duplicates => "duplicates",
126 TaskEditFieldArg::CustomFields => "custom_fields",
127 TaskEditFieldArg::Agent => "agent",
128 TaskEditFieldArg::CreatedAt => "created_at",
129 TaskEditFieldArg::UpdatedAt => "updated_at",
130 TaskEditFieldArg::CompletedAt => "completed_at",
131 TaskEditFieldArg::StartedAt => "started_at",
132 TaskEditFieldArg::ScheduledStart => "scheduled_start",
133 TaskEditFieldArg::EstimatedMinutes => "estimated_minutes",
134 TaskEditFieldArg::ActualMinutes => "actual_minutes",
135 }
136 }
137}
138
139impl From<TaskEditFieldArg> for TaskEditKey {
140 fn from(value: TaskEditFieldArg) -> Self {
141 match value {
142 TaskEditFieldArg::Title => TaskEditKey::Title,
143 TaskEditFieldArg::Status => TaskEditKey::Status,
144 TaskEditFieldArg::Priority => TaskEditKey::Priority,
145 TaskEditFieldArg::Tags => TaskEditKey::Tags,
146 TaskEditFieldArg::Scope => TaskEditKey::Scope,
147 TaskEditFieldArg::Evidence => TaskEditKey::Evidence,
148 TaskEditFieldArg::Plan => TaskEditKey::Plan,
149 TaskEditFieldArg::Notes => TaskEditKey::Notes,
150 TaskEditFieldArg::Request => TaskEditKey::Request,
151 TaskEditFieldArg::DependsOn => TaskEditKey::DependsOn,
152 TaskEditFieldArg::Blocks => TaskEditKey::Blocks,
153 TaskEditFieldArg::RelatesTo => TaskEditKey::RelatesTo,
154 TaskEditFieldArg::Duplicates => TaskEditKey::Duplicates,
155 TaskEditFieldArg::CustomFields => TaskEditKey::CustomFields,
156 TaskEditFieldArg::Agent => TaskEditKey::Agent,
157 TaskEditFieldArg::CreatedAt => TaskEditKey::CreatedAt,
158 TaskEditFieldArg::UpdatedAt => TaskEditKey::UpdatedAt,
159 TaskEditFieldArg::CompletedAt => TaskEditKey::CompletedAt,
160 TaskEditFieldArg::StartedAt => TaskEditKey::StartedAt,
161 TaskEditFieldArg::ScheduledStart => TaskEditKey::ScheduledStart,
162 TaskEditFieldArg::EstimatedMinutes => TaskEditKey::EstimatedMinutes,
163 TaskEditFieldArg::ActualMinutes => TaskEditKey::ActualMinutes,
164 }
165 }
166}