github.com/orangenpresse/up@v0.6.0/internal/validate/validate.go (about) 1 // Package validate provides config validation functions. 2 package validate 3 4 import ( 5 "regexp" 6 "strings" 7 8 "github.com/pkg/errors" 9 ) 10 11 // RequiredString validation. 12 func RequiredString(s string) error { 13 if strings.TrimSpace(s) == "" { 14 return errors.New("is required") 15 } 16 17 return nil 18 } 19 20 // RequiredStrings validation. 21 func RequiredStrings(s []string) error { 22 for i, v := range s { 23 if err := RequiredString(v); err != nil { 24 return errors.Wrapf(err, "at index %d", i) 25 } 26 } 27 28 return nil 29 } 30 31 // MinStrings validation. 32 func MinStrings(s []string, n int) error { 33 if len(s) < n { 34 if n == 1 { 35 return errors.Errorf("must have at least %d value", n) 36 } 37 38 return errors.Errorf("must have at least %d values", n) 39 } 40 41 return nil 42 } 43 44 // name regexp. 45 var name = regexp.MustCompile(`^[a-z][-a-z0-9]*$`) 46 47 // Name validation. 48 func Name(s string) error { 49 if !name.MatchString(s) { 50 return errors.Errorf("must contain only lowercase alphanumeric characters and '-'") 51 } 52 53 return nil 54 } 55 56 // stage regexp. 57 var stage = regexp.MustCompile(`^[a-zA-Z0-9_]+$`) 58 59 // Stage name validation. 60 func Stage(s string) error { 61 if !stage.MatchString(s) { 62 return errors.Errorf("must contain only alphanumeric characters and '_'") 63 } 64 65 return nil 66 } 67 68 // List validation. 69 func List(s string, list []string) error { 70 for _, v := range list { 71 if s == v { 72 return nil 73 } 74 } 75 76 return errors.Errorf("%q is invalid, must be one of:\n\n • %s", s, strings.Join(list, "\n • ")) 77 } 78 79 // Lists validation. 80 func Lists(vals, list []string) error { 81 for _, v := range vals { 82 if err := List(v, list); err != nil { 83 return err 84 } 85 } 86 87 return nil 88 }