Validação de dados em Rust: visão geral de bibliotecas e frameworks
A validação de dados é uma etapa criticamente importante no desenvolvimento de qualquer aplicação em Rust. A segurança, estabilidade e previsibilidade do funcionamento do programa dependem da correta verificação dos dados de entrada. No ecossistema Rust, existem várias soluções maduras para validação, cada uma com suas características. Neste artigo, vamos analisar detalhadamente três bibliotecas principais: validator, garde e validify, além de abordar os recursos integrados do serde.
1. Biblioteca validator
validator é a biblioteca mais popular para validação de estruturas de dados. Ela fornece atributos para anotar campos de estruturas e geração automática de código de verificação através de macros derive.
Instalação
[dependencies]validator = { version = "0.18", features = ["derive"] }Exemplo de uso
use validator::Validate;
#[derive(Debug, Validate)]struct User { #[validate(length(min = 3, max = 50))] username: String,
#[validate(email)] email: String,
#[validate(range(min = 18, max = 120))] age: u8,
#[validate(required)] phone: Option<String>,}
fn main() { let user = User { username: "Jo".to_string(), email: "invalid-email".to_string(), age: 15, phone: None, };
match user.validate() { Ok(_) => println!("Dados corretos"), Err(errors) => { for (field, err) in &errors { println!("Erro no campo '{}': {:?}", field, err); } } }}Principais recursos do validator
- Validadores integrados:
email,url,phone,credit_card,ip,must_matche outros. - Verificação de comprimentos de strings, intervalos numéricos, expressões regulares.
- Validação de estruturas aninhadas através de
#[validate(nested)]. - Suporte a validadores personalizados através de
custom.
2. Biblioteca garde
garde é um framework de validação moderno e performático, que se posiciona como uma alternativa ao validator com desempenho melhorado e um sistema de regras mais flexível.
Instalação
[dependencies]garde = "0.21"Exemplo de uso
use garde::Validate;
#[derive(Debug, Validate)]struct RegisterForm { #[garde(length(min = 3, max = 50))] username: String,
#[garde(email)] email: String,
#[garde(range(min = 18))] age: u32,
#[garde(ascii)] password: String,}
fn main() { let form = RegisterForm { username: "a".to_string(), email: "test".to_string(), age: 15, password: "senha".to_string(), };
if let Err(errors) = form.validate() { for error in errors { println!("Erro: {}", error.message); } } else { println!("Formulário válido"); }}Vantagens do garde
- Alta performance devido à minimização de alocações.
- Suporte a validadores assíncronos.
- Conjunto rico de regras integradas:
email,url,ip,phone,credit_card,patterne outros. - Agrupamento de regras e validação contextual.
- Possibilidade de criar validadores personalizados com lógica arbitrária.
3. Biblioteca validify
validify é um framework que se integra com serde e fornece uma maneira conveniente de validar dados imediatamente após a desserialização. Isso é especialmente útil ao trabalhar com frameworks web (actix-web, axum).
Instalação
Também na biblioteca
Laravel Framework para PHP: guia completo com exemplos
Tokens JWT em C# (.NET): trabalhando com System.IdentityModel.Tokens.Jwt
Tokens JWT em PHP: biblioteca firebase/php-jwt e guia completo
Validação de dados em PHP com a biblioteca Respect\\Validation