2024-05-23 18:06:49 +01:00
|
|
|
package executor
|
|
|
|
|
2024-06-15 18:40:13 +01:00
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"strconv"
|
|
|
|
"strings"
|
|
|
|
"time"
|
|
|
|
)
|
2024-05-23 18:06:49 +01:00
|
|
|
|
2024-06-10 18:59:01 +01:00
|
|
|
const (
|
2024-08-11 11:49:47 +01:00
|
|
|
flagAccountName = "account-name"
|
|
|
|
flagAttachmentID = "attachment-id"
|
|
|
|
flagContent = "content"
|
|
|
|
flagFrom = "from"
|
|
|
|
flagFromFile = "from-file"
|
|
|
|
flagInstance = "instance"
|
|
|
|
flagListID = "list-id"
|
|
|
|
flagListTitle = "list-title"
|
|
|
|
flagPollID = "poll-id"
|
|
|
|
flagPollOption = "poll-option"
|
|
|
|
flagStatusID = "status-id"
|
|
|
|
flagTag = "tag"
|
|
|
|
flagTo = "to"
|
|
|
|
flagType = "type"
|
|
|
|
flagVote = "vote"
|
2024-06-10 18:59:01 +01:00
|
|
|
)
|
|
|
|
|
2024-06-15 18:40:13 +01:00
|
|
|
type MultiStringFlagValue []string
|
2024-05-23 18:06:49 +01:00
|
|
|
|
2024-08-11 00:16:12 +01:00
|
|
|
func NewMultiStringFlagValue() MultiStringFlagValue {
|
|
|
|
arr := make([]string, 0, 3)
|
|
|
|
|
|
|
|
return MultiStringFlagValue(arr)
|
|
|
|
}
|
|
|
|
|
|
|
|
func (v MultiStringFlagValue) String() string {
|
|
|
|
return strings.Join(v, ", ")
|
2024-05-23 18:06:49 +01:00
|
|
|
}
|
|
|
|
|
2024-06-15 18:40:13 +01:00
|
|
|
func (v *MultiStringFlagValue) Set(value string) error {
|
2024-05-23 18:06:49 +01:00
|
|
|
if len(value) > 0 {
|
2024-06-15 18:40:13 +01:00
|
|
|
*v = append(*v, value)
|
2024-05-23 18:06:49 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
2024-06-15 18:40:13 +01:00
|
|
|
type MultiIntFlagValue []int
|
|
|
|
|
2024-08-11 00:16:12 +01:00
|
|
|
func NewMultiIntFlagValue() MultiIntFlagValue {
|
|
|
|
arr := make([]int, 0, 3)
|
|
|
|
|
|
|
|
return MultiIntFlagValue(arr)
|
|
|
|
}
|
|
|
|
|
|
|
|
func (v MultiIntFlagValue) String() string {
|
2024-06-15 18:40:13 +01:00
|
|
|
value := "Choices: "
|
|
|
|
|
2024-08-11 00:16:12 +01:00
|
|
|
for ind, vote := range v {
|
|
|
|
if ind == len(v)-1 {
|
2024-06-15 18:40:13 +01:00
|
|
|
value += strconv.Itoa(vote)
|
|
|
|
} else {
|
|
|
|
value += strconv.Itoa(vote) + ", "
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return value
|
|
|
|
}
|
|
|
|
|
|
|
|
func (v *MultiIntFlagValue) Set(text string) error {
|
|
|
|
value, err := strconv.Atoi(text)
|
|
|
|
if err != nil {
|
|
|
|
return fmt.Errorf("unable to parse the value to an integer: %w", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
*v = append(*v, value)
|
|
|
|
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
type TimeDurationFlagValue struct {
|
|
|
|
Duration time.Duration
|
|
|
|
}
|
|
|
|
|
2024-08-10 16:23:00 +01:00
|
|
|
func NewTimeDurationFlagValue() TimeDurationFlagValue {
|
|
|
|
return TimeDurationFlagValue{
|
|
|
|
Duration: 0 * time.Second,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-06-15 18:40:13 +01:00
|
|
|
func (v TimeDurationFlagValue) String() string {
|
2024-08-10 16:23:00 +01:00
|
|
|
return "Time duration: " + v.Duration.String()
|
2024-06-15 18:40:13 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
func (v *TimeDurationFlagValue) Set(text string) error {
|
|
|
|
duration, err := time.ParseDuration(text)
|
|
|
|
if err != nil {
|
|
|
|
return fmt.Errorf("unable to parse the value as time duration: %w", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
v.Duration = duration
|
|
|
|
|
|
|
|
return nil
|
2024-05-23 18:06:49 +01:00
|
|
|
}
|
2024-08-11 00:16:12 +01:00
|
|
|
|
|
|
|
type BoolPtrFlagValue struct {
|
|
|
|
Value *bool
|
|
|
|
}
|
|
|
|
|
|
|
|
func NewBoolPtrFlagValue() BoolPtrFlagValue {
|
|
|
|
return BoolPtrFlagValue{
|
|
|
|
Value: nil,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (b BoolPtrFlagValue) String() string {
|
|
|
|
if b.Value == nil {
|
|
|
|
return "NOT SET"
|
|
|
|
}
|
|
|
|
|
|
|
|
return strconv.FormatBool(*b.Value)
|
|
|
|
}
|
|
|
|
|
|
|
|
func (b *BoolPtrFlagValue) Set(value string) error {
|
|
|
|
boolVar, err := strconv.ParseBool(value)
|
|
|
|
if err != nil {
|
|
|
|
return fmt.Errorf("unable to parse %q as a boolean value: %w", value, err)
|
|
|
|
}
|
|
|
|
|
|
|
|
b.Value = new(bool)
|
|
|
|
*b.Value = boolVar
|
|
|
|
|
|
|
|
return nil
|
|
|
|
}
|