Files
valid/CHANGELOG.md

30 lines
2.0 KiB
Markdown
Raw Permalink Normal View History

# Changelog
All notable changes to this module will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this module adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [0.9.0] - 2026-03-18
### Added
- `Validator` interface with a single `Struct(v any) error` method for struct tag validation.
- `New(opts ...Option) Validator` constructor; returns an English-language validator by default.
- `Option` functional-option type for configuring a `Validator` at construction time.
- `WithMessageProvider(mp MessageProvider) Option` option to replace the built-in message provider.
- `MessageProvider` interface with `Message(field, tag, param string) string`; implement to supply custom or localised messages.
- `DefaultMessages` (`MessageProvider`): built-in English messages for `required`, `email`, `min`, `max`, and a generic fallback.
- `SpanishMessages` (`MessageProvider`): opt-in Spanish translations for the same tag set.
- Error behaviour: a failing struct field returns `*xerrors.Err` with code `ErrInvalidInput`; structured context keys `"field"` and `"tag"` are attached via `WithContext`. The raw `playground.ValidationErrors` is chained via `WithError` for callers that need all failures.
- Error behaviour: passing a non-struct value returns `*xerrors.Err` with code `ErrInternal` (wrapping `playground.InvalidValidationError`).
- Only the first failing field is surfaced per `Struct` call; the full error slice is preserved in the error chain.
### Design Notes
- `go-playground/validator/v10` is used as the backend but is entirely hidden behind the `Validator` interface; no playground types appear in the public API.
- `MessageProvider` decouples human-readable text from validation logic, enabling i18n without any changes to the core package.
- A single `*playground.Validate` instance is created per `Validator` (not per call) to amortise the cost of reflection-based type caching.
[0.9.0]: https://code.nochebuena.dev/go/valid/releases/tag/v0.9.0