53 lines
1.0 KiB
Go
53 lines
1.0 KiB
Go
package helpers
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"strings"
|
|
)
|
|
|
|
func IsOneOf(value string, choices ...string) (ok bool) {
|
|
for _, choice := range choices {
|
|
if value == choice {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
var (
|
|
ErrNoChoice = errors.New("one or more values is set but there is no possible value available")
|
|
ErrValueNotOneOf = errors.New("value is not one of the possible choices")
|
|
)
|
|
|
|
func AreAllOneOf(values, choices []string) (err error) {
|
|
if len(values) > 0 && len(choices) == 0 {
|
|
return ErrNoChoice
|
|
}
|
|
|
|
set := make(map[string]struct{}, len(choices))
|
|
for _, choice := range choices {
|
|
choice = strings.ToLower(choice)
|
|
set[choice] = struct{}{}
|
|
}
|
|
|
|
for _, value := range values {
|
|
_, ok := set[value]
|
|
if !ok {
|
|
return fmt.Errorf("%w: value %q, choices available are %s",
|
|
ErrValueNotOneOf, value, strings.Join(choices, ", "))
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func Uint16IsOneOf(port uint16, choices []uint16) (ok bool) {
|
|
for _, choice := range choices {
|
|
if port == choice {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|