status.go

 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}