Skip to content

Commit

Permalink
fix errors
Browse files Browse the repository at this point in the history
  • Loading branch information
hspitzley-czi committed Mar 6, 2024
1 parent 7aee647 commit df90821
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 71 deletions.
6 changes: 3 additions & 3 deletions config/go.mod
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
module github.com/chanzuckerberg/go-misc/config/v2

go 1.21.1
go 1.21

require (
github.com/go-playground/locales v0.14.1
github.com/go-playground/universal-translator v0.18.1
github.com/go-playground/validator/v10 v10.19.0
github.com/mitchellh/mapstructure v1.5.0
github.com/spf13/viper v1.18.2
Expand All @@ -15,6 +13,8 @@ require (
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
github.com/fsnotify/fsnotify v1.7.0 // indirect
github.com/gabriel-vasile/mimetype v1.4.3 // indirect
github.com/go-playground/locales v0.14.1 // indirect
github.com/go-playground/universal-translator v0.18.1 // indirect
github.com/hashicorp/hcl v1.0.0 // indirect
github.com/leodido/go-urn v1.4.0 // indirect
github.com/magiconair/properties v1.8.7 // indirect
Expand Down
85 changes: 17 additions & 68 deletions config/validation.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,74 +4,26 @@ import (
"errors"
"fmt"
"reflect"
"sync"

"github.com/go-playground/locales/en"
ut "github.com/go-playground/universal-translator"
"github.com/go-playground/validator/v10"
)

var (
once sync.Once
validate *validator.Validate
translatorMessages map[string](func() string)
translator ut.Translator
)

func init() {
once.Do(func() {
validate = validator.New()
// err := validate.RegisterValidation("valid_env", ValidateEnvironment)
// if err != nil {
// logrus.Fatal("Failed to register custom validation")
// }
// err = validate.RegisterValidation("valid_env_dest", ValidateEnvironmentCopyDestination)
// if err != nil {
// logrus.Fatal("Failed to register custom validation")
// }

en := en.New()
uni := ut.New(en, en)
translator, _ = uni.GetTranslator("en")
// var (
// once sync.Once
// validate *validator.Validate
// )

translatorMessages = map[string](func() string){
// "valid_env": func() string {
// envs := []string{}
// for env := range model.EnvironmentMapping {
// envs = append(envs, env)
// }
// return fmt.Sprintf("{0} must be one of %s", envs)
// },
// "valid_env_dest": func() string {
// return "Copying configs from source env to destination env as specified is not allowed"
// },
}
// func init() {
// once.Do(func() {
// validate = validator.New()
// })
// }

for tag, getMessage := range translatorMessages {
err := validate.RegisterTranslation(
tag,
translator,
func(ut ut.Translator) error {
return ut.Add(tag, getMessage(), true) // see universal-translator for details
},
// use a function that returns a function here so the tag can be memoized
func(violatedTag string) validator.TranslationFunc {
return func(ut ut.Translator, fe validator.FieldError) string {
t, _ := ut.T(violatedTag, fe.Field())
return t
}
}(tag),
)
if err != nil {
return fmt.Errorf("Failed to register custom validation error translator: %w", err)
}
}
})
}

func validateConfiguration[T any](cfg *T) []ValidationError {
func validateConfiguration[T any](cfg *T) error {
var errs []ValidationError
// var finalErr error = nil

validate := validator.New()
err := validate.Struct(cfg)
if err != nil {
errSlice := &validator.ValidationErrors{}
Expand All @@ -86,15 +38,12 @@ func validateConfiguration[T any](cfg *T) []ValidationError {
element.Tag = err.Tag()
element.Value = err.Param()
element.Type = err.Kind().String()
element.Message = fmt.Sprintf("Field validation for '%s' failed on the '%s' tag", element.FailedField, element.Tag)

if _, ok := translatorMessages[element.Tag]; ok {
element.Message = err.Translate(translator)
} else {
element.Message = fmt.Sprintf("Field validation for '%s' failed on the '%s' tag", element.FailedField, element.Tag)
}

errs = append(errs, &element)
errs = append(errs, element)
}
return errSlice
}
return errs

return nil
}

0 comments on commit df90821

Please sign in to comment.