vld-derive 0.3.0

Derive macro for the vld validation library
Documentation

Crates.io docs.rs License Platform GitHub issues GitHub stars

vld-derive

Derive macro for the vld validation library.

Overview

Provides #[derive(Validate)] — a procedural macro that generates validate() and is_valid() methods for your structs based on #[vld(...)] field attributes.

This crate is not meant to be used directly. Enable the derive feature on the vld crate instead:

[dependencies]
vld = { version = "0.1", features = ["derive"] }

Quick start

use vld::prelude::*;
use vld::Validate;

#[derive(Validate)]
struct User {
    #[vld(string().min(2).max(50))]
    name: String,
    #[vld(number().int().min(0))]
    age: i64,
    #[vld(string().email())]
    email: String,
}

Serde rename support

The macro automatically respects #[serde(rename)] and #[serde(rename_all)] attributes to determine the JSON field names used during validation:

use vld::prelude::*;
use vld::Validate;
use serde::Deserialize;

#[derive(Validate, Deserialize)]
#[serde(rename_all = "camelCase")]
struct ApiRequest {
    #[vld(string().min(1))]
    first_name: String,
    #[vld(string().email())]
    email_address: String,
}

This will expect JSON keys firstName and emailAddress.

OpenAPI / utoipa integration

When the openapi feature is enabled on vld, the derive macro also generates json_schema() and to_openapi_document() methods. This makes #[derive(Validate)] fully compatible with impl_to_schema! from vld-utoipa:

[dependencies]
vld = { version = "0.1", features = ["derive", "openapi"] }
vld-utoipa = "0.1"
utoipa = "5"
use vld::Validate;
use vld_utoipa::impl_to_schema;

#[derive(Debug, serde::Deserialize, Validate)]
#[serde(rename_all = "camelCase")]
struct UpdateLocationRequest {
    #[vld(vld::string().min(1).max(255))]
    name: String,
    #[vld(vld::string())]
    street_address: String,
    #[vld(vld::number().int().non_negative().min(1).max(9999))]
    street_number: i64,
    #[vld(vld::boolean())]
    is_active: bool,
}

impl_to_schema!(UpdateLocationRequest);
// Now UpdateLocationRequest implements utoipa::ToSchema
// with camelCase property names in the OpenAPI spec.

Examples

See the playground example for a complete usage demo, including #[derive(Validate)]:

cargo run -p playground

License

MIT