validator — Validação de dados em Rust

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

O que é validator?

validator é uma biblioteca popular para validação de dados em Rust, fornecendo uma maneira simples e expressiva de verificar a correção de dados de entrada. Ela é baseada em macros e anotações, permitindo descrever regras de validação diretamente nas estruturas de dados. A biblioteca suporta verificações como comprimento de string, intervalo numérico, expressões regulares, campos obrigatórios e validadores personalizados.

Para que serve a validação?

Em qualquer aplicação que trabalhe com dados externos (entrada do usuário, requisições de API, arquivos de configuração), é criticamente importante verificar a correção desses dados antes de processá-los. Erros de validação podem levar à falha do programa, vulnerabilidades de segurança ou lógica incorreta. O validator permite descrever regras de forma centralizada, gerar automaticamente mensagens de erro compreensíveis e evitar código boilerplate.

Instalação

Adicione ao Cargo.toml:

[dependencies]validator = { version = "0.16", features = ["derive"] }serde = { version = "1.0", features = ["derive"] }

Também é frequentemente usado junto com serde para desserialização de dados.

Principais funcionalidades

  • Atributos de validação: #[validate(length(min = 1, max = 100))], #[validate(range(min = 18, max = 99))], #[validate(email)], #[validate(regex = "...")] e outros.
  • Validadores personalizados: através do atributo #[validate(custom = "my_function")].
  • Validação aninhada: para estruturas que contêm outras estruturas.
  • Agrupamento de erros: retorna ValidationErrors com detalhamento por campos.

Exemplo de código em Rust

use validator::Validate;use serde::Deserialize;

#[derive(Debug, Deserialize, Validate)]struct User { #[validate(length(min = 2, max = 50))] name: String,

#[validate(email)] email: String,

#[validate(range(min = 18, max = 120))] age: u8,

#[validate(required)] #[validate(length(min = 8))] password: Option<String>,}

fn main() { let user = User { name: "A".to_string(), // muito curto email: "invalid".to_string(), age: 15, password: Some("123".to_string()), };

match user.validate() { Ok(_) => println!("Dados corretos"), Err(errors) => { for (field, err_list) in errors.field_errors() { println!("Campo '{}' tem erros:", field); for err in err_list { println!(" - {}", err.message.as_ref().unwrap_or(&"erro desconhecido".to_string())); } } } }}

Quando usar validator?

  • Ao criar APIs REST (por exemplo, com Actix-web, Axum, Rocket) para verificar requisições JSON recebidas.
  • Em aplicações CLI para validação de argumentos de linha de comando.
  • Ao processar formulários no lado do servidor.
  • Em qualquer lugar onde seja necessária uma verificação declarativa de dados com código mínimo.

A biblioteca é ideal para projetos onde a segurança e a legibilidade do código são importantes. Ela é ativamente mantida e amplamente utilizada no ecossistema Rust.

Recommendations