validator — Валидация данных в Rust

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Что такое validator?

validator — это популярная библиотека для валидации данных на языке Rust. Она предоставляет гибкие и выразительные инструменты для проверки корректности входных данных: строк, чисел, email-адресов, URL, IP-адресов, UUID и многого другого. Библиотека основана на макросах и трейтах, что позволяет легко комбинировать правила валидации и создавать собственные проверки.

Зачем нужна валидация данных?

В любом приложении, работающем с пользовательским вводом, API или конфигурационными файлами, критически важно проверять данные до их использования. Ошибки валидации могут привести к падению программы, уязвимостям или некорректной работе. Библиотека validator помогает:

  • Гарантировать целостность данных
  • Уменьшить количество boilerplate-кода
  • Обеспечить единообразную обработку ошибок
  • Упростить тестирование

Установка

Добавьте validator в файл Cargo.toml:

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

Также часто используется serde для десериализации данных перед валидацией.

Основные функции

  • Атрибуты валидации — #[validate(...)] для полей структур
  • Встроенные валидаторы: length, range, email, url, ip, uuid, contains, regex, custom
  • Вложенная валидация — рекурсивная проверка вложенных структур
  • Кастомные валидаторы — через функции или замыкания
  • Группировка ошибок — сбор всех ошибок валидации в единый объект ValidationErrors

Пример кода на 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 = 13, max = 120))]
    age: u8,

    #[validate(url)]
    website: Option<String>,
}

fn main() {
    let user = User {
        name: "A".to_string(),
        email: "invalid-email".to_string(),
        age: 10,
        website: Some("not-a-url".to_string()),
    };

    match user.validate() {
        Ok(_) => println!("Данные корректны"),
        Err(errors) => {
            for (field, errs) in errors.field_errors() {
                for err in errs {
                    println!("Ошибка в поле {}: {}", field, err);
                }
            }
        }
    }
}

Когда использовать validator?

Библиотека идеально подходит для:

  • Веб-серверов на Actix, Axum, Rocket
  • Обработки форм и JSON-запросов
  • Парсинга конфигурационных файлов
  • CLI-приложений с пользовательским вводом
  • Валидации данных перед записью в БД

Если вам нужно быстро и надёжно проверять данные в Rust — validator станет отличным выбором.

Рекомендаций