diff --git a/config/go.mod b/config/go.mod index f46d0b8d..0ba3fb21 100644 --- a/config/go.mod +++ b/config/go.mod @@ -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 @@ -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 diff --git a/config/validation.go b/config/validation.go index 79b1e1d6..8fd613c6 100644 --- a/config/validation.go +++ b/config/validation.go @@ -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{} @@ -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 }