1// SPDX-FileCopyrightText: Amolith <amolith@secluded.site>
2//
3// SPDX-License-Identifier: AGPL-3.0-or-later
4
5package lunatask
6
7import (
8 "errors"
9 "fmt"
10 "strings"
11)
12
13// TaskStatus represents the workflow state of a task.
14type TaskStatus string
15
16// Valid task status values.
17const (
18 // StatusLater is the default status for new tasks.
19 StatusLater TaskStatus = "later"
20 StatusNext TaskStatus = "next"
21 StatusInProgress TaskStatus = "started"
22 StatusWaiting TaskStatus = "waiting"
23 StatusCompleted TaskStatus = "completed"
24)
25
26// Errors returned by TaskStatus operations.
27var (
28 // ErrInvalidTaskStatus is returned when parsing an unknown task status string.
29 ErrInvalidTaskStatus = errors.New("invalid task status")
30)
31
32// String returns the task status value as a string.
33func (s TaskStatus) String() string {
34 return string(s)
35}
36
37// ParseTaskStatus parses a string to a TaskStatus value (case-insensitive).
38// Valid values: "later", "next", "started", "in-progress", "waiting", "completed".
39func ParseTaskStatus(str string) (TaskStatus, error) {
40 switch strings.ToLower(str) {
41 case "later":
42 return StatusLater, nil
43 case "next":
44 return StatusNext, nil
45 case "started", "in-progress":
46 return StatusInProgress, nil
47 case "waiting":
48 return StatusWaiting, nil
49 case "completed":
50 return StatusCompleted, nil
51 default:
52 return "", fmt.Errorf("%w: %q", ErrInvalidTaskStatus, str)
53 }
54}