64 lines
1.8 KiB
Go
64 lines
1.8 KiB
Go
package common
|
|
|
|
// StringArrayFlag represents a string array flag that tracks whether it was explicitly set
|
|
type StringArrayFlag interface {
|
|
// Value returns a copy of the current string array value
|
|
Value() []string
|
|
|
|
// WasExplicitlySet returns whether the flag was explicitly set
|
|
WasExplicitlySet() bool
|
|
|
|
// Set sets the value and marks the flag as explicitly set
|
|
Set(value []string)
|
|
|
|
// Append adds a value to the array and marks the flag as explicitly set
|
|
Append(value string)
|
|
}
|
|
|
|
// stringArrayFlag is the implementation of ArrayFlag
|
|
type stringArrayFlag struct {
|
|
value []string
|
|
wasExplicitlySet bool
|
|
}
|
|
|
|
// NewStringArrayFlag creates a new ArrayFlag with default values
|
|
func NewStringArrayFlag(defaultValue []string) StringArrayFlag {
|
|
// Create a copy of the default value to avoid modifying the original
|
|
valueCopy := make([]string, len(defaultValue))
|
|
copy(valueCopy, defaultValue)
|
|
|
|
return &stringArrayFlag{
|
|
value: valueCopy,
|
|
wasExplicitlySet: false,
|
|
}
|
|
}
|
|
|
|
// Value returns a copy of the current string array value
|
|
func (af *stringArrayFlag) Value() []string {
|
|
// Create a copy to prevent external modification of internal state
|
|
result := make([]string, len(af.value))
|
|
copy(result, af.value)
|
|
return result
|
|
}
|
|
|
|
// WasExplicitlySet returns whether the flag was explicitly set
|
|
func (af *stringArrayFlag) WasExplicitlySet() bool {
|
|
return af.wasExplicitlySet
|
|
}
|
|
|
|
// Set sets the value and marks the flag as explicitly set
|
|
func (af *stringArrayFlag) Set(value []string) {
|
|
// Create a copy of the value to avoid modifying the original
|
|
valueCopy := make([]string, len(value))
|
|
copy(valueCopy, value)
|
|
|
|
af.value = valueCopy
|
|
af.wasExplicitlySet = true
|
|
}
|
|
|
|
// Append adds a value to the array and marks the flag as explicitly set
|
|
func (af *stringArrayFlag) Append(value string) {
|
|
af.value = append(af.value, value)
|
|
af.wasExplicitlySet = true
|
|
}
|