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 Description,
108 Status,
109 Priority,
110 Tags,
111 Scope,
112 Evidence,
113 Plan,
114 Notes,
115 Request,
116 DependsOn,
117 Blocks,
118 RelatesTo,
119 Duplicates,
120 CustomFields,
121 Agent,
122 CreatedAt,
123 UpdatedAt,
124 CompletedAt,
125 StartedAt,
126 ScheduledStart,
127 EstimatedMinutes,
128 ActualMinutes,
129}
130
131impl TaskEditFieldArg {
132 pub fn as_str(self) -> &'static str {
133 match self {
134 TaskEditFieldArg::Title => "title",
135 TaskEditFieldArg::Description => "description",
136 TaskEditFieldArg::Status => "status",
137 TaskEditFieldArg::Priority => "priority",
138 TaskEditFieldArg::Tags => "tags",
139 TaskEditFieldArg::Scope => "scope",
140 TaskEditFieldArg::Evidence => "evidence",
141 TaskEditFieldArg::Plan => "plan",
142 TaskEditFieldArg::Notes => "notes",
143 TaskEditFieldArg::Request => "request",
144 TaskEditFieldArg::DependsOn => "depends_on",
145 TaskEditFieldArg::Blocks => "blocks",
146 TaskEditFieldArg::RelatesTo => "relates_to",
147 TaskEditFieldArg::Duplicates => "duplicates",
148 TaskEditFieldArg::CustomFields => "custom_fields",
149 TaskEditFieldArg::Agent => "agent",
150 TaskEditFieldArg::CreatedAt => "created_at",
151 TaskEditFieldArg::UpdatedAt => "updated_at",
152 TaskEditFieldArg::CompletedAt => "completed_at",
153 TaskEditFieldArg::StartedAt => "started_at",
154 TaskEditFieldArg::ScheduledStart => "scheduled_start",
155 TaskEditFieldArg::EstimatedMinutes => "estimated_minutes",
156 TaskEditFieldArg::ActualMinutes => "actual_minutes",
157 }
158 }
159}
160
161impl From<TaskEditFieldArg> for TaskEditKey {
162 fn from(value: TaskEditFieldArg) -> Self {
163 match value {
164 TaskEditFieldArg::Title => TaskEditKey::Title,
165 TaskEditFieldArg::Description => TaskEditKey::Description,
166 TaskEditFieldArg::Status => TaskEditKey::Status,
167 TaskEditFieldArg::Priority => TaskEditKey::Priority,
168 TaskEditFieldArg::Tags => TaskEditKey::Tags,
169 TaskEditFieldArg::Scope => TaskEditKey::Scope,
170 TaskEditFieldArg::Evidence => TaskEditKey::Evidence,
171 TaskEditFieldArg::Plan => TaskEditKey::Plan,
172 TaskEditFieldArg::Notes => TaskEditKey::Notes,
173 TaskEditFieldArg::Request => TaskEditKey::Request,
174 TaskEditFieldArg::DependsOn => TaskEditKey::DependsOn,
175 TaskEditFieldArg::Blocks => TaskEditKey::Blocks,
176 TaskEditFieldArg::RelatesTo => TaskEditKey::RelatesTo,
177 TaskEditFieldArg::Duplicates => TaskEditKey::Duplicates,
178 TaskEditFieldArg::CustomFields => TaskEditKey::CustomFields,
179 TaskEditFieldArg::Agent => TaskEditKey::Agent,
180 TaskEditFieldArg::CreatedAt => TaskEditKey::CreatedAt,
181 TaskEditFieldArg::UpdatedAt => TaskEditKey::UpdatedAt,
182 TaskEditFieldArg::CompletedAt => TaskEditKey::CompletedAt,
183 TaskEditFieldArg::StartedAt => TaskEditKey::StartedAt,
184 TaskEditFieldArg::ScheduledStart => TaskEditKey::ScheduledStart,
185 TaskEditFieldArg::EstimatedMinutes => TaskEditKey::EstimatedMinutes,
186 TaskEditFieldArg::ActualMinutes => TaskEditKey::ActualMinutes,
187 }
188 }
189}