• v1.0.0 ab11fd2ace

    Rene Nochebuena released this 2026-05-11 18:21:29 -06:00 | 1 commits to main since this release

    v1.0.0

    code.nochebuena.dev/go/valid

    Overview

    valid v1.0.0 commits the struct validation API as stable. All v0.9.0 roadmap
    items are resolved. The module ships a minimal Validator interface backed by
    go-playground/validator/v10, fully decoupled from the public surface, with
    pluggable i18n via MessageProvider and tight xerrors integration.

    What Changed Since v0.9.0

    New: JSON tag name resolution

    Field names in error context now use the json struct tag when available,
    falling back to the Go field name if no tag is defined or the tag is "-".

    Before (v0.9.0):

    // struct field: EmailAddress string `json:"email_address" validate:"required"`
    xe.Fields()["field"] // → "EmailAddress"
    

    After (v1.0.0):

    xe.Fields()["field"] // → "email_address"
    

    The same name is passed to MessageProvider.Message(field, tag, param), so
    custom providers automatically receive the JSON-facing field name.

    Structs without json tags are unaffected — the Go field name continues to be used.

    Roadmap items resolved

    Item Resolution
    Surfacing all validation errors No — Unwrap() exposes playground.ValidationErrors for callers that need all failures
    JSON tag name resolution Implemented via RegisterTagNameFunc
    Feedback on MessageProvider interface Stable — Message(field, tag, param string) string committed
    Cross-field validation helpers No — no recurring need identified from consumer codebases

    Full API (stable)

    Validator — interface with a single method: Struct(v any) error.
    Returns nil if valid, *xerrors.Err with ErrInvalidInput for field failures
    (first failing field), or *xerrors.Err with ErrInternal for non-struct input.

    New(opts ...Option) Validator — constructor. Uses DefaultMessages (English) unless overridden.

    WithMessageProvider(mp MessageProvider) Option — functional option to inject a custom message provider.

    MessageProvider — interface: Message(field, tag, param string) string.
    field is the json tag name when available, otherwise the Go field name.

    DefaultMessages — built-in English provider for required, email, min, max, and a generic fallback.

    SpanishMessages — opt-in Spanish provider for the same tag set.

    Migration from v0.9.0

    No breaking changes to the API surface. The only behavioral change is field
    name resolution: if your structs define json tags, the "field" key in
    error context and the field argument to MessageProvider.Message will now
    reflect the json tag name instead of the Go field name.

    go get code.nochebuena.dev/go/valid@v1.0.0
    
    Downloads