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
ValidationErrorscom 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.
Também na biblioteca
Validação de dados em Java: visão geral de bibliotecas e abordagens
Processamento e parsing de Markdown em PHP: bibliotecas e ferramentas
Envio de SMS em PHP: bibliotecas de API do sms.ru e outros serviços
Trabalhando com Kafka em Swift (iOS/macOS): bibliotecas, clientes e exemplos