Path: blob/dev/pkg/utils/yaml/yaml_decode_wrapper.go
2070 views
package yaml12import (3"io"4"strings"56"github.com/go-playground/validator/v10"7"github.com/pkg/errors"8"gopkg.in/yaml.v2"9)1011var validate *validator.Validate1213// DecodeAndValidate is a wrapper for yaml Decode adding struct validation14func DecodeAndValidate(r io.Reader, v interface{}) error {15if err := yaml.NewDecoder(r).Decode(v); err != nil {16return err17}18if validate == nil {19validate = validator.New()20}2122if err := validate.Struct(v); err != nil {23if _, ok := err.(*validator.InvalidValidationError); ok {24return err25}26errs := []string{}27for _, err := range err.(validator.ValidationErrors) {28errs = append(errs, err.Namespace()+": "+err.Tag())29}30return errors.Wrap(errors.New(strings.Join(errs, ", ")), "validation failed for these fields")31}32return nil33}343536