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