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  }