/
advanceddev
/
license-server
Обзор
Документация
Войти
/
advanceddev
/
license-server
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
2
CI/CD
Аналитика
Безопасность
master
internal/validate/validate.go
90 строк
2 KB
advanceddev
first_commit
09 авг 2026, 20:04
Не верифицирован
09 авг 2026, 20:04
1326ca6
Код
Авторство
О чём код?
// Package validate -- package validate import ( "encoding/json" "fmt" "io" "strings" "github.com/go-playground/validator/v10" ) var v *validator.Validate func init() { v = validator.New() } // DecodeStrict - декодирует JSON из reader с отклонением неизвестных полей и последующей структурной валидацией. func DecodeStrict(r io.Reader, dst any) error { dec := json.NewDecoder(r) dec.DisallowUnknownFields() if err := dec.Decode(dst); err != nil { return &DecodeError{Err: err} } if err := v.Struct(dst); err != nil { return &ValidationError{Err: err} } return nil } // Validate - проверяет структуру без декодирования. func Validate(s any) error { if err := v.Struct(s); err != nil { return &ValidationError{Err: err} } return nil } // DecodeError — ошибка парсинга JSON или неизвестное поле. type DecodeError struct { Err error } func (e *DecodeError) Error() string { if strings.Contains(e.Err.Error(), "unknown field") { return e.Err.Error() } return fmt.Sprintf("invalid json: %s", e.Err.Error()) } // ValidationError — ошибка структурной валидации. type ValidationError struct { Err error } func (e *ValidationError) Error() string { errs := e.Err.(validator.ValidationErrors) msgs := make([]string, len(errs)) for i, fe := range errs { switch fe.Tag() { case "required": msgs[i] = fmt.Sprintf("%s is required", fe.Field()) case "uuid": msgs[i] = fmt.Sprintf("%s must be a valid UUID", fe.Field()) case "min": msgs[i] = fmt.Sprintf("%s must be at least %s", fe.Field(), fe.Param()) case "max": msgs[i] = fmt.Sprintf("%s must be at most %s", fe.Field(), fe.Param()) default: msgs[i] = fmt.Sprintf("%s failed validation: %s", fe.Field(), fe.Tag()) } } return strings.Join(msgs, "; ") } // IsDecodeError - проверяет, является ли ошибка ошибкой декодирования. func IsDecodeError(err error) bool { _, ok := err.(*DecodeError) return ok } // IsValidationError - проверяет, является ли ошибка ошибкой валидации. func IsValidationError(err error) bool { _, ok := err.(*ValidationError) return ok }