validator

package module
v1.0.68 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 20, 2025 License: MIT Imports: 3 Imported by: 0

README

Validator

Uma biblioteca de validação para structs no Go, que utiliza regras definidas programaticamente, sem a necessidade de tags. Este pacote é ideal para quem busca flexibilidade e reutilização de lógica de validação em diversos contextos de uma aplicação.

📋 Funcionalidades

  • Validação baseada em regras programáticas (sem tags).
  • Suporte a validações customizadas.
  • Mensagens de erro associadas aos campos.
  • Compatível com projetos complexos e escaláveis.

🛠️ Instalação

Instale o pacote usando:

go get github.com/Marlliton/validator

🚀 Uso Básico

Veja um exemplo de como criar e validar uma struct usando o pacote:

Definição e Validação
package main

import (
	"fmt"

	"github.com/Marlliton/validator"
	"github.com/Marlliton/validator/fail"
	"github.com/Marlliton/validator/rule"
)

type User struct {
	Name  string
	Email string
	Age   int
}

func (u *User) Validate() (bool, []*fail.Error) {
	v := validator.New()

	v.Add("Name", rule.Rules{
		rule.Required(),
		rule.MinLength(3),
		rule.MaxLength(50),
	})
	v.Add("Email", rule.Rules{
		rule.Required(),
		rule.ValidEmail(),
	})
	v.Add("Age", rule.Rules{
		rule.MinValue(18),
	})

	errs := v.Validate(*u)
	if len(errs) == 0 {
		return true, nil
	}
	return false, errs
}

func main() {
	user := User{Name: "Jo", Email: "invalid_email", Age: 15}
	if ok, errs := user.Validate(); !ok {
		fmt.Println("Erros de validação:")
		for _, err := range errs {
			fmt.Println(err.Message)
		}
	} else {
		fmt.Println("Tudo válido!")
	}
}
Regras de Validação Suportadas

O pacote oferece uma variedade de regras que podem ser aplicadas aos campos. Exemplos:

  • rule.Required(): O campo é obrigatório.
  • rule.MinLength(n): Comprimento mínimo.
  • rule.MaxLength(n): Comprimento máximo.
  • rule.ExactLength(n): Comprimento exatamente igual a "n".
  • rule.ValidURL(): Valida uma URL.
  • rule.ValidEmail(): Valida um email.
  • rule.ValidPhoneNumber(): Valida um telefone no formato e164.
  • rule.String(n): Verifica se é uma string.
  • rule.Int(n): Verifica se é um inteiro.
  • rule.Bool(n): Verifica se é um bool.
  • rule.MinValue(n): Valor mínimo permitido.
  • rule.MaxValue(n): Valor máximo permitido.

Você pode combinar essas regras em diferentes campos.

Validações Personalizadas

Crie suas próprias validações passando uma função personalizada como regra:

v.Add("CustomField", rule.Rules{
	func(fieldName string, value interface{}) *fail.Error {
		if value.(int)%2 != 0 {
			return fail.New(fieldName, "O número deve ser par")
		}
		return nil
	},
})

📚 Exemplos

  • Exemplos de uso disponíveis no diretório examples.

🛡️ Contribuindo

Contribuições são bem-vindas! Abra um issue para relatar problemas ou envie um pull request com melhorias. Certifique-se de seguir as diretrizes no arquivo CONTRIBUTING.md.

🗹 Itens a Fazer

  • Permitir que o usuário forneça sua próprias mensagens customizadas
  • Validar uma URL
  • Checar o tipo:
    • string
    • number
      • bool
      • float
  • Adicionar método in para validar se um dado esté presente em um slice
  • Resolver bug na regra Required com o valor zero (0)

📄 Licença

Este projeto é distribuído sob a licença MIT.

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func New

func New() *validator

Types

This section is empty.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL