[{"data":1,"prerenderedAt":2860},["ShallowReactive",2],{"navigation":3,"\u002Fchangelog":335,"\u002Fchangelog-surround":2857},[4,27,73,95,121,135,305,331],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":26},"Getting started","i-lucide-rocket","\u002Fgetting-started","1.getting-started",[10,14,18,22],{"title":11,"path":12,"stem":13},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction",{"title":15,"path":16,"stem":17},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation",{"title":19,"path":20,"stem":21},"Quick start","\u002Fgetting-started\u002Fquick-start","1.getting-started\u002F3.quick-start",{"title":23,"path":24,"stem":25},"MSRV","\u002Fgetting-started\u002Fmsrv","1.getting-started\u002F9.msrv",false,{"title":28,"icon":29,"path":30,"stem":31,"children":32,"page":26},"Schemas","i-lucide-shapes","\u002Fschemas","2.schemas",[33,37,41,45,49,53,57,61,65,69],{"title":34,"path":35,"stem":36},"Strings","\u002Fschemas\u002Fstrings","2.schemas\u002F1.strings",{"title":38,"path":39,"stem":40},"Custom rules","\u002Fschemas\u002Frules","2.schemas\u002F10.rules",{"title":42,"path":43,"stem":44},"Numbers","\u002Fschemas\u002Fnumbers","2.schemas\u002F2.numbers",{"title":46,"path":47,"stem":48},"Booleans, literals and enums","\u002Fschemas\u002Fprimitives","2.schemas\u002F3.primitives",{"title":50,"path":51,"stem":52},"Dates and times","\u002Fschemas\u002Fdates","2.schemas\u002F4.dates",{"title":54,"path":55,"stem":56},"Collections","\u002Fschemas\u002Fcollections","2.schemas\u002F5.collections",{"title":58,"path":59,"stem":60},"Dynamic objects","\u002Fschemas\u002Fobjects","2.schemas\u002F6.objects",{"title":62,"path":63,"stem":64},"Modifiers","\u002Fschemas\u002Fmodifiers","2.schemas\u002F7.modifiers",{"title":66,"path":67,"stem":68},"Combinators","\u002Fschemas\u002Fcombinators","2.schemas\u002F8.combinators",{"title":70,"path":71,"stem":72},"Other types","\u002Fschemas\u002Fspecial-types","2.schemas\u002F9.special-types",{"title":74,"icon":75,"path":76,"stem":77,"children":78,"page":26},"Structs","i-lucide-braces","\u002Fstructs","3.structs",[79,83,87,91],{"title":80,"path":81,"stem":82},"schema! macro","\u002Fstructs\u002Fschema-macro","3.structs\u002F1.schema-macro",{"title":84,"path":85,"stem":86},"#[derive(Validate)]","\u002Fstructs\u002Fderive","3.structs\u002F2.derive",{"title":88,"path":89,"stem":90},"Parse vs validate","\u002Fstructs\u002Fparse-vs-validate","3.structs\u002F3.parse-vs-validate",{"title":92,"path":93,"stem":94},"Lenient parsing","\u002Fstructs\u002Flenient","3.structs\u002F4.lenient",{"title":96,"icon":97,"path":98,"stem":99,"children":100,"page":26},"Errors","i-lucide-triangle-alert","\u002Ferrors","4.errors",[101,105,109,113,117],{"title":102,"path":103,"stem":104},"Error model","\u002Ferrors\u002Foverview","4.errors\u002F1.overview",{"title":106,"path":107,"stem":108},"Issue codes","\u002Ferrors\u002Fissue-codes","4.errors\u002F2.issue-codes",{"title":110,"path":111,"stem":112},"Formatting","\u002Ferrors\u002Fformatting","4.errors\u002F3.formatting",{"title":114,"path":115,"stem":116},"Custom messages","\u002Ferrors\u002Fcustom-messages","4.errors\u002F4.custom-messages",{"title":118,"path":119,"stem":120},"Translations","\u002Ferrors\u002Fi18n","4.errors\u002F5.i18n",{"title":122,"icon":123,"path":124,"stem":125,"children":126,"page":26},"OpenAPI","i-lucide-file-json","\u002Fopenapi","5.openapi",[127,131],{"title":128,"path":129,"stem":130},"JSON Schema and OpenAPI","\u002Fopenapi\u002Fjson-schema","5.openapi\u002F1.json-schema",{"title":132,"path":133,"stem":134},"Schema diff","\u002Fopenapi\u002Fdiff","5.openapi\u002F2.diff",{"title":136,"icon":137,"path":138,"stem":139,"children":140,"page":26},"Integrations","i-lucide-plug","\u002Fintegrations","6.integrations",[141,191,209,223,245,259,273,291],{"title":142,"icon":143,"path":144,"stem":145,"children":146,"page":26},"Web frameworks","i-lucide-globe","\u002Fintegrations\u002Fweb","6.integrations\u002F1.web",[147,151,155,159,163,167,171,175,179,183,187],{"title":148,"path":149,"stem":150},"Web adapters overview","\u002Fintegrations\u002Fweb\u002Foverview","6.integrations\u002F1.web\u002F01.overview",{"title":152,"path":153,"stem":154},"vld-axum","\u002Fintegrations\u002Fweb\u002Faxum","6.integrations\u002F1.web\u002F02.axum",{"title":156,"path":157,"stem":158},"vld-actix","\u002Fintegrations\u002Fweb\u002Factix","6.integrations\u002F1.web\u002F03.actix",{"title":160,"path":161,"stem":162},"vld-ntex","\u002Fintegrations\u002Fweb\u002Fntex","6.integrations\u002F1.web\u002F04.ntex",{"title":164,"path":165,"stem":166},"vld-poem","\u002Fintegrations\u002Fweb\u002Fpoem","6.integrations\u002F1.web\u002F05.poem",{"title":168,"path":169,"stem":170},"vld-rama","\u002Fintegrations\u002Fweb\u002Frama","6.integrations\u002F1.web\u002F06.rama",{"title":172,"path":173,"stem":174},"vld-rocket","\u002Fintegrations\u002Fweb\u002Frocket","6.integrations\u002F1.web\u002F07.rocket",{"title":176,"path":177,"stem":178},"vld-salvo","\u002Fintegrations\u002Fweb\u002Fsalvo","6.integrations\u002F1.web\u002F08.salvo",{"title":180,"path":181,"stem":182},"vld-tower","\u002Fintegrations\u002Fweb\u002Ftower","6.integrations\u002F1.web\u002F09.tower",{"title":184,"path":185,"stem":186},"vld-warp","\u002Fintegrations\u002Fweb\u002Fwarp","6.integrations\u002F1.web\u002F10.warp",{"title":188,"path":189,"stem":190},"vld-tonic","\u002Fintegrations\u002Fweb\u002Ftonic","6.integrations\u002F1.web\u002F11.tonic",{"title":192,"icon":193,"path":194,"stem":195,"children":196,"page":26},"OpenAPI and JSON Schema","i-lucide-file-code","\u002Fintegrations\u002Fopenapi","6.integrations\u002F2.openapi",[197,201,205],{"title":198,"path":199,"stem":200},"vld-utoipa","\u002Fintegrations\u002Fopenapi\u002Futoipa","6.integrations\u002F2.openapi\u002F1.utoipa",{"title":202,"path":203,"stem":204},"vld-schemars","\u002Fintegrations\u002Fopenapi\u002Fschemars","6.integrations\u002F2.openapi\u002F2.schemars",{"title":206,"path":207,"stem":208},"vld-aide","\u002Fintegrations\u002Fopenapi\u002Faide","6.integrations\u002F2.openapi\u002F3.aide",{"title":210,"icon":211,"path":212,"stem":213,"children":214,"page":26},"Codegen and test data","i-lucide-wand","\u002Fintegrations\u002Fcodegen","6.integrations\u002F3.codegen",[215,219],{"title":216,"path":217,"stem":218},"vld-ts","\u002Fintegrations\u002Fcodegen\u002Fts","6.integrations\u002F3.codegen\u002F1.ts",{"title":220,"path":221,"stem":222},"vld-fake","\u002Fintegrations\u002Fcodegen\u002Ffake","6.integrations\u002F3.codegen\u002F2.fake",{"title":224,"icon":225,"path":226,"stem":227,"children":228,"page":26},"Databases","i-lucide-database","\u002Fintegrations\u002Fdatabase","6.integrations\u002F4.database",[229,233,237,241],{"title":230,"path":231,"stem":232},"vld-sqlx","\u002Fintegrations\u002Fdatabase\u002Fsqlx","6.integrations\u002F4.database\u002F1.sqlx",{"title":234,"path":235,"stem":236},"vld-diesel","\u002Fintegrations\u002Fdatabase\u002Fdiesel","6.integrations\u002F4.database\u002F2.diesel",{"title":238,"path":239,"stem":240},"vld-sea","\u002Fintegrations\u002Fdatabase\u002Fsea-orm","6.integrations\u002F4.database\u002F3.sea-orm",{"title":242,"path":243,"stem":244},"vld-surrealdb","\u002Fintegrations\u002Fdatabase\u002Fsurrealdb","6.integrations\u002F4.database\u002F4.surrealdb",{"title":246,"icon":247,"path":248,"stem":249,"children":250,"page":26},"Messaging","i-lucide-mail","\u002Fintegrations\u002Fmessaging","6.integrations\u002F5.messaging",[251,255],{"title":252,"path":253,"stem":254},"vld-redis","\u002Fintegrations\u002Fmessaging\u002Fredis","6.integrations\u002F5.messaging\u002F1.redis",{"title":256,"path":257,"stem":258},"vld-lapin","\u002Fintegrations\u002Fmessaging\u002Flapin","6.integrations\u002F5.messaging\u002F2.lapin",{"title":260,"icon":261,"path":262,"stem":263,"children":264,"page":26},"Config and CLI","i-lucide-terminal","\u002Fintegrations\u002Fconfig-cli","6.integrations\u002F6.config-cli",[265,269],{"title":266,"path":267,"stem":268},"vld-config","\u002Fintegrations\u002Fconfig-cli\u002Fconfig","6.integrations\u002F6.config-cli\u002F1.config",{"title":270,"path":271,"stem":272},"vld-clap","\u002Fintegrations\u002Fconfig-cli\u002Fclap","6.integrations\u002F6.config-cli\u002F2.clap",{"title":274,"icon":275,"path":276,"stem":277,"children":278,"page":26},"UI frameworks","i-lucide-monitor","\u002Fintegrations\u002Fui","6.integrations\u002F7.ui",[279,283,287],{"title":280,"path":281,"stem":282},"vld-dioxus","\u002Fintegrations\u002Fui\u002Fdioxus","6.integrations\u002F7.ui\u002F1.dioxus",{"title":284,"path":285,"stem":286},"vld-leptos","\u002Fintegrations\u002Fui\u002Fleptos","6.integrations\u002F7.ui\u002F2.leptos",{"title":288,"path":289,"stem":290},"vld-tauri","\u002Fintegrations\u002Fui\u002Ftauri","6.integrations\u002F7.ui\u002F3.tauri",{"title":292,"icon":293,"path":294,"stem":295,"children":296,"page":26},"Shared crates","i-lucide-package","\u002Fintegrations\u002Fshared","6.integrations\u002F8.shared",[297,301],{"title":298,"path":299,"stem":300},"vld-http-common","\u002Fintegrations\u002Fshared\u002Fhttp-common","6.integrations\u002F8.shared\u002F1.http-common",{"title":302,"path":303,"stem":304},"vld-integration-common","\u002Fintegrations\u002Fshared\u002Fintegration-common","6.integrations\u002F8.shared\u002F2.integration-common",{"title":306,"icon":307,"path":308,"stem":309,"children":310,"page":26},"Guides","i-lucide-book-open","\u002Fguides","7.guides",[311,315,319,323,327],{"title":312,"path":313,"stem":314},"Migration","\u002Fguides\u002Fmigration","7.guides\u002F1.migration",{"title":316,"path":317,"stem":318},"Security notes","\u002Fguides\u002Fsecurity","7.guides\u002F2.security",{"title":320,"path":321,"stem":322},"Performance","\u002Fguides\u002Fperformance","7.guides\u002F3.performance",{"title":324,"path":325,"stem":326},"Contributing","\u002Fguides\u002Fcontributing","7.guides\u002F4.contributing",{"title":328,"path":329,"stem":330},"FAQ","\u002Fguides\u002Ffaq","7.guides\u002F5.faq",{"title":332,"path":333,"stem":334},"Changelog","\u002Fchangelog","9.changelog",{"id":336,"title":332,"body":337,"description":2850,"extension":2851,"links":2852,"meta":2853,"navigation":2854,"path":333,"seo":2855,"stem":334,"__hash__":2856},"docs\u002F9.changelog.md",{"type":338,"value":339,"toc":2764},"minimark",[340,344,361,369,374,418,425,429,611,615,623,626,771,775,789,796,800,859,865,868,1261,1265,1445,1448,1692,1695,1743,1746,1936,1940,1962,1965,1995,2001,2004,2139,2146,2149,2198,2205,2208,2286,2292,2295,2378,2382,2389,2395,2398,2451,2458,2461,2466,2469,2477,2484,2487,2495,2502,2505,2513,2516,2524,2527,2544,2547,2552,2555,2560,2567,2570,2587,2590,2601,2604,2632,2635,2640,2647,2650,2688,2691,2702,2705,2710,2713,2736,2742,2745,2753,2756],[341,342,343],"p",{},"All notable changes to this project will be documented in this file.",[341,345,346,347,354,355,360],{},"The format is based on ",[348,349,353],"a",{"href":350,"rel":351},"https:\u002F\u002Fkeepachangelog.com\u002Fen\u002F1.1.0\u002F",[352],"nofollow","Keep a Changelog",",\nand this project adheres to ",[348,356,359],{"href":357,"rel":358},"https:\u002F\u002Fsemver.org\u002Fspec\u002Fv2.0.0.html",[352],"Semantic Versioning",".",[362,363,365],"h2",{"id":364},"unreleased",[366,367,368],"span",{},"Unreleased",[370,371,373],"h3",{"id":372},"added","Added",[375,376,377,400],"ul",{},[378,379,380,383,384,387,388,391,392,395,396,399],"li",{},[381,382,84],"code",{}," honours ",[381,385,386],{},"#[serde(deny_unknown_fields)]"," on structs and enums: unknown keys fail with ",[381,389,390],{},"unrecognized_field"," (the tag \u002F ",[381,393,394],{},"content"," keys of tagged enums are allowed), and the JSON Schema gets ",[381,397,398],{},"additionalProperties: false",". On a unit variant of an internally tagged enum vld rejects extra keys, which serde lets through.",[378,401,402,405,406,409,410,413,414,417],{},[381,403,404],{},"VldSchema::try_transform(|v| -> Result\u003CU, E>)",": a fallible transform whose ",[381,407,408],{},"Err"," (",[381,411,412],{},"E: Display",") becomes a validation issue (",[381,415,416],{},"Custom { code: \"transform\" }",").",[362,419,421,424],{"id":420},"_060-2026-11-07",[366,422,423],{},"0.6.0"," - 2026-11-07",[370,426,428],{"id":427},"breaking-changes","Breaking changes",[375,430,431,473,521,541,597],{},[378,432,433,437,438,441,442,445,446,449,450,453,454,445,457,460,461,464,465,468,469,472],{},[434,435,436],"strong",{},"Regex",": ",[381,439,440],{},"regex-lite"," is no longer public. ",[381,443,444],{},"string().regex(Regex)"," \u002F ",[381,447,448],{},"regex_msg"," and the ",[381,451,452],{},"vld::regex_lite"," re-export are removed; use ",[381,455,456],{},"string().pattern(\"...\")",[381,458,459],{},"pattern_msg",", or ",[381,462,463],{},"vld::rules::Pattern::new(..)"," to handle an invalid pattern. Both need the ",[381,466,467],{},"regex"," feature, as ",[381,470,471],{},"regex()"," did.",[378,474,475,478,479,482,483,486,487,490,491,494,495,498,499,502,503,505,506,508,509,511,512,486,515,486,518,360],{},[434,476,477],{},"optional \u002F nullable \u002F nullish"," now differ: ",[381,480,481],{},"nullable()"," object fields are required (absent → ",[381,484,485],{},"missing_field",", ",[381,488,489],{},"null"," → ",[381,492,493],{},"None",") and listed in JSON Schema ",[381,496,497],{},"required","; ",[381,500,501],{},"optional()"," no longer adds ",[381,504,489],{}," to its JSON Schema (parsing still accepts ",[381,507,489],{},", which serde writes for ",[381,510,493],{},"). TypeScript output follows: ",[381,513,514],{},"x?: T",[381,516,517],{},"x: T | null",[381,519,520],{},"x?: T | null",[378,522,523,437,526,445,529,532,533,536,537,540],{},[434,524,525],{},"Unions",[381,527,528],{},"Either",[381,530,531],{},"Either3"," serialize untagged, so a union inside an object round-trips as the bare value instead of ",[381,534,535],{},"{\"Left\": ...}","; unions forward ",[381,538,539],{},"output_json"," to the matching variant.",[378,542,543,546,547,445,550,553,554,486,557,445,560,486,563,486,566,445,568,486,571,486,574,486,577,445,579,486,582,486,585,486,588,486,591,486,594,360],{},[434,544,545],{},"Removed"," everything deprecated in 0.5: the ",[381,548,549],{},"serialize",[381,551,552],{},"deserialize"," features, ",[381,555,556],{},"ZFloat::finite",[381,558,559],{},"ZObject::field_schema",[381,561,562],{},"deep_partial",[381,564,565],{},"vld-actix::VldJsonError",[381,567,234],{},[381,569,570],{},"vld-sqlx::validate_update",[381,572,573],{},"vld-surrealdb::validate_record",[381,575,576],{},"vld-http-common::{ValidationIssueWithCode, format_issues_with_code, format_json_parse_error, format_utf8_error}",[381,578,180],{},[381,580,581],{},"vld-rama::try_validated",[381,583,584],{},"vld-tauri::{validate_event, validate_state, validate_plugin_config, validate_channel_message}",[381,586,587],{},"impl_to_lapin!",[381,589,590],{},"impl_to_redis!",[381,592,593],{},"impl_to_redis_async!",[381,595,596],{},"vld-utoipa::{impl_into_params!, impl_to_schema_query!, impl_to_schema_path!}",[378,598,599,602,603,606,607,610],{},[381,600,601],{},"DynSchema"," has a new required method ",[381,604,605],{},"dyn_parse_missing"," (implemented for every ",[381,608,609],{},"VldSchema","; only hand-written impls need it).",[370,612,614],{"id":613},"migration-from-05","Migration from 0.5",[341,616,617,618,360],{},"See the ",[348,619,622],{"href":620,"rel":621},"https:\u002F\u002Fs00d.github.io\u002Fvld\u002Fguides\u002Fmigration",[352],"migration guide",[370,624,373],{"id":625},"added-1",[375,627,628,660,710,719,725,740,748,765],{},[378,629,630,409,632,635,636,639,640,486,643,445,646,649,650,445,653,655,656,659],{},[434,631,38],{},[381,633,634],{},"vld::rules","): the ",[381,637,638],{},"Rule\u003CT>"," trait (key, check, optional message and JSON Schema keywords), ",[381,641,642],{},"rules::from_fn",[381,644,645],{},"ZString::rule",[381,647,648],{},"rule_msg"," (keeps the string builder) and ",[381,651,652],{},"VldSchema::rule",[381,654,648],{}," on any schema. A failing rule reports ",[381,657,658],{},"Custom { code: \u003Ckey> }",", so it can be translated by key.",[378,661,662,664,665,486,668,670,671,486,673,676,677,445,680,445,683,445,686,445,689,692,693,445,695,698,699,702,703,409,706,709],{},[381,663,84],{}," on enums, following serde: externally tagged, ",[381,666,667],{},"tag",[381,669,667],{}," + ",[381,672,394],{},[381,674,675],{},"untagged","; unit, newtype, tuple and struct variants; variant ",[381,678,679],{},"rename",[381,681,682],{},"alias",[381,684,685],{},"skip",[381,687,688],{},"other",[381,690,691],{},"rename_all"," and enum ",[381,694,691],{},[381,696,697],{},"rename_all_fields",". The output is the enum itself; the JSON Schema is ",[381,700,701],{},"oneOf"," with an OpenAPI ",[381,704,705],{},"discriminator",[381,707,708],{},"anyOf"," when untagged).",[378,711,712,714,715,718],{},[381,713,84],{}," supports ",[381,716,717],{},"#[serde(flatten)]"," on fields: parsed from the same object, JSON Schema properties merged.",[378,720,721,724],{},[381,722,723],{},"VldSchema::parse_missing",": what an absent object key parses to (wrappers forward it).",[378,726,727,437,730,732,733,736,737,360],{},[381,728,729],{},"vld::Schema",[381,731,609],{}," plus the JSON Schema traits under ",[381,734,735],{},"openapi",", for ",[381,738,739],{},"fn f() -> impl vld::Schema\u003COutput = T>",[378,741,742,409,745,417],{},[381,743,744],{},"ValidationIssue::path_string()",[381,746,747],{},".lab.fund[0].vigor",[378,749,750,751,754,755,445,757,760,761,764],{},"Inherent ",[381,752,753],{},"vld_parse_value"," on ",[381,756,84],{},[381,758,759],{},"schema!"," types (no ",[381,762,763],{},"VldParse"," import needed).",[378,766,767,770],{},[381,768,769],{},"Either::into_inner"," when both sides have the same type.",[370,772,774],{"id":773},"fixed","Fixed",[375,776,777],{},[378,778,779,437,781,784,785,788],{},[381,780,202],{},[381,782,783],{},"pattern"," and ",[381,786,787],{},"patternProperties"," regexes are compiled once and cached instead of on every validated value.",[362,790,792,795],{"id":791},"_051-2026-11-06",[366,793,794],{},"0.5.1"," - 2026-11-06",[370,797,799],{"id":798},"changed","Changed",[375,801,802,805,840,852],{},[378,803,804],{},"All crates use Rust edition 2024 (MSRV unchanged: 1.85).",[378,806,807,808,445,811,814,815,486,818,821,822,486,824,821,826,486,828,821,831,486,833,445,835,821,838,417],{},"Dependencies used only by tests are no longer normal dependencies (",[381,809,810],{},"serde",[381,812,813],{},"serde_json"," in several integration crates); unused ones are removed (",[381,816,817],{},"hyper",[381,819,820],{},"http-body-util"," in ",[381,823,152],{},[381,825,810],{},[381,827,266],{},[381,829,830],{},"tokio",[381,832,188],{},[381,834,817],{},[381,836,837],{},"hyper-util",[381,839,180],{},[378,841,842,844,845,848,849,360],{},[381,843,220],{},": password generation no longer uses ",[381,846,847],{},"unsafe","; every crate forbids ",[381,850,851],{},"unsafe_code",[378,853,854,855,858],{},"Every public item has rustdoc documentation (",[381,856,857],{},"missing_docs"," is on in every library crate).",[362,860,862,795],{"id":861},"_050-2026-11-06",[366,863,864],{},"0.5.0",[370,866,428],{"id":867},"breaking-changes-1",[375,869,870,891,920,994,1016,1062,1080,1106,1127,1159,1178,1188,1206,1227,1241],{},[378,871,872,875,876,879,880,445,882,884,885,888,889,360],{},[434,873,874],{},"Features",": the ",[381,877,878],{},"std"," feature is gone (everything it gated is always available); ",[381,881,549],{},[381,883,552],{}," are deprecated no-ops (removed in 0.6); ",[381,886,887],{},"diff"," enables ",[381,890,735],{},[378,892,893,437,896,445,899,902,903,486,906,486,909,912,913,445,916,919],{},[434,894,895],{},"Date backends are additive",[381,897,898],{},"ZDate",[381,900,901],{},"ZDateTime"," are generic over the backend and each feature has its own module (",[381,904,905],{},"vld::chrono",[381,907,908],{},"vld::jiff",[381,910,911],{},"vld::time","). ",[381,914,915],{},"vld::date()",[381,917,918],{},"vld::datetime()"," and the prelude aliases exist only when exactly one backend is enabled. Previously the backend was picked silently (chrono > jiff > time).",[378,921,922,437,924,927,928,486,931,486,934,486,937,486,940,486,943,486,946,486,949,486,952,486,955,958,959,962,963,445,966,969,970,973,974,977,978,981,982,486,984,784,987,990,991,360],{},[434,923,106],{},[381,925,926],{},"IssueCode"," has a typed variant for every built-in check (",[381,929,930],{},"InvalidLength",[381,932,933],{},"InvalidFormat",[381,935,936],{},"InvalidDate",[381,938,939],{},"NotMultipleOf",[381,941,942],{},"InvalidEnumValue",[381,944,945],{},"InvalidUnion",[381,947,948],{},"NotUnique",[381,950,951],{},"MissingField",[381,953,954],{},"FileTypeNotAllowed",[381,956,957],{},"SerializeError",", …); ",[381,960,961],{},"Custom"," is for user codes only. ",[381,964,965],{},"TooSmall",[381,967,968],{},"TooBig"," carry ",[381,971,972],{},"origin: SizeOrigin"," and a ",[381,975,976],{},"serde_json::Value"," bound instead of an ",[381,979,980],{},"f64",". ",[381,983,926],{},[381,985,986],{},"StringValidation",[381,988,989],{},"DateKind"," are ",[381,992,993],{},"#[non_exhaustive]",[378,995,996,999,1000,1002,1003,1005,1006,1009,1010,1013,1014,360],{},[434,997,998],{},"Messages",": default messages come from one English template table; an absent required key reports ",[381,1001,485],{}," (a present ",[381,1004,489],{}," stays ",[381,1007,1008],{},"invalid_type","); ",[381,1011,1012],{},"Display"," no longer appends \", received X\" to ",[381,1015,1008],{},[378,1017,1018,1021,1022,486,1025,486,1028,486,1031,486,1034,1037,1038,486,1041,486,1044,486,1047,486,1050,1053,1054,1057,1058,1061],{},[434,1019,1020],{},"Module layout",": core split into ",[381,1023,1024],{},"schema\u002F",[381,1026,1027],{},"error\u002F",[381,1029,1030],{},"object\u002F",[381,1032,1033],{},"macros\u002F",[381,1035,1036],{},"openapi\u002F"," (old paths ",[381,1039,1040],{},"vld::json_schema",[381,1042,1043],{},"vld::diff",[381,1045,1046],{},"vld::format",[381,1048,1049],{},"vld::i18n",[381,1051,1052],{},"vld::input"," remain as aliases); the inherent ",[381,1055,1056],{},"to_json_schema()"," duplicates are gone (use the ",[381,1059,1060],{},"JsonSchema"," trait).",[378,1063,1064,1067,1068,1070,1071,1009,1073,1076,1077,360],{},[434,1065,1066],{},"JSON Schema",": optional \u002F nullable \u002F nullish fields and unions emit ",[381,1069,708],{}," (was ",[381,1072,701],{},[381,1074,1075],{},"ZNullable::is_required()"," is ",[381,1078,1079],{},"false",[378,1081,1082,437,1085,486,1087,486,1090,784,1093,1095,1096,498,1099,1102,1103,360],{},[434,1083,1084],{},"Caching",[381,1086,759],{},[381,1088,1089],{},"impl_validate_fields!",[381,1091,1092],{},"impl_rules!",[381,1094,84],{}," build field schemas once per process, so field schemas must be ",[381,1097,1098],{},"Send + Sync + 'static",[381,1100,1101],{},"VldInput::to_json_value"," returns ",[381,1104,1105],{},"Cow\u003CValue>",[378,1107,1108,437,1112,445,1115,1118,1119,498,1122,445,1124,1126],{},[434,1109,1110],{},[381,1111,84],{},[381,1113,1114],{},"validate_fields()",[381,1116,1117],{},"parse_lenient()"," are generated only with ",[381,1120,1121],{},"#[vld(lenient)]",[381,1123,717],{},[381,1125,682],{}," are compile errors.",[378,1128,1129,1132,1133,1136,1137,1140,1141,1144,1145,1148,1149,1152,1153,1155,1156,417],{},[434,1130,1131],{},"Web adapters",": every ",[381,1134,1135],{},"VldJson"," extractor answers ",[434,1138,1139],{},"415"," unless the content type is ",[381,1142,1143],{},"application\u002Fjson"," or ",[381,1146,1147],{},"application\u002F*+json","; malformed JSON is ",[434,1150,1151],{},"422"," with the validation body (was 400); 422 issues carry a ",[381,1154,381],{}," field; query\u002Fpath\u002Fform\u002Fheader\u002Fcookie values fall back to the original text when the schema wants a string (",[381,1157,1158],{},"parse_coerced",[378,1160,1161,437,1167,1102,1170,1173,1174,1177],{},[434,1162,1163,445,1165],{},[381,1164,180],{},[381,1166,168],{},[381,1168,1169],{},"validated()",[381,1171,1172],{},"Option\u003CT>","; the tower inner service receives ",[381,1175,1176],{},"Request\u003CValidatedBody\u003CB>>"," (non-JSON bodies are no longer buffered).",[378,1179,1180,437,1184,1187],{},[434,1181,1182],{},[381,1183,184],{},[381,1185,1186],{},"handle_rejection"," maps warp rejections to their real status (unknown → 500 instead of 404); bodies are read as a stream with a limit (413).",[378,1189,1190,1194,1195,1198,1199,1009,1202,1205],{},[434,1191,1192],{},[381,1193,160],{},": ntex ",[434,1196,1197],{},"4"," is the default (",[381,1200,1201],{},"ntex-4",[381,1203,1204],{},"default-features = false, features = [\"ntex-3\"]"," keeps ntex 3. Crate MSRV 1.97.",[378,1207,1208,437,1212,1215,1216,1219,1220,1223,1224,1226],{},[434,1209,1210],{},[381,1211,216],{},[381,1213,1214],{},"with_default"," emits ",[381,1217,1218],{},"x.nullish().transform((v) => v ?? d)"," (Zod) \u002F ",[381,1221,1222],{},"v.nullish(x, d)"," (Valibot), matching vld, which accepts ",[381,1225,489],{}," there.",[378,1228,1229,437,1233,1236,1237,1240],{},[434,1230,1231],{},[381,1232,270],{},[381,1234,1235],{},"validate_or_exit"," requires ",[381,1238,1239],{},"clap::CommandFactory"," and reports clap's real argument names; depends on clap 4.",[378,1242,1243,821,1246,486,1248,486,1250,486,1252,1254,1255,486,1258,417],{},[434,1244,1245],{},"Issue paths",[381,1247,288],{},[381,1249,284],{},[381,1251,280],{},[381,1253,242],{}," have no leading dot (",[381,1256,1257],{},"user.email",[381,1259,1260],{},"items[0]",[370,1262,1264],{"id":1263},"migration-from-04","Migration from 0.4",[375,1266,1267,1280,1300,1333,1351,1363,1376,1389,1397,1404,1423,1437],{},[378,1268,1269,1272,1273,486,1275,486,1277,1279],{},[434,1270,1271],{},"Cargo features",": drop ",[381,1274,878],{},[381,1276,549],{},[381,1278,552],{}," from your feature lists.",[378,1281,1282,1285,1286,486,1289,486,1292,1295,1296,1299],{},[434,1283,1284],{},"Dates",": with one backend nothing changes. With several, call ",[381,1287,1288],{},"vld::chrono::date()",[381,1290,1291],{},"vld::jiff::datetime()",[381,1293,1294],{},"vld::time::time()"," and name ",[381,1297,1298],{},"vld::chrono::ZDate"," etc.",[378,1301,1302,1305,1306,1309,1310,1313,1314,1317,1318,409,1321,1324,1325,1328,1329,1332],{},[434,1303,1304],{},"Matching on issue codes",": replace ",[381,1307,1308],{},"IssueCode::Custom { code: \"…\" }"," checks for built-in errors with the typed variants; ",[381,1311,1312],{},"TooSmall { minimum, .. }"," now has ",[381,1315,1316],{},"origin"," and a JSON ",[381,1319,1320],{},"minimum",[381,1322,1323],{},"minimum.as_f64()","). Add a ",[381,1326,1327],{},"_ =>"," arm (non-exhaustive enums). Prefer ",[381,1330,1331],{},"IssueCode::key()"," for stable string codes.",[378,1334,1335,1338,1339,1341,1342,486,1344,486,1347,1350],{},[434,1336,1337],{},"Messages \u002F i18n",": tests that compared full English messages may need updating (",[381,1340,485],{},", no \", received X\"); custom translation tables can add the new keys (",[381,1343,485],{},[381,1345,1346],{},"type.\u003Cname>",[381,1348,1349],{},"too_small.\u003Corigin>",", …), the specific key is tried before the generic one.",[378,1352,1353,1356,1357,1359,1360,1362],{},[434,1354,1355],{},"JSON Schema consumers",": expect ",[381,1358,708],{}," instead of ",[381,1361,701],{}," for optional \u002F nullable fields and unions.",[378,1364,1365,1368,1369,1372,1373,1375],{},[434,1366,1367],{},"Web clients",": send ",[381,1370,1371],{},"Content-Type: application\u002Fjson","; handle 415 and 422 (malformed JSON), read the new ",[381,1374,381],{}," field.",[378,1377,1378,1381,1382,1384,1385,445,1387,360],{},[434,1379,1380],{},"Derive",": add ",[381,1383,1121],{}," where you call ",[381,1386,1114],{},[381,1388,1117],{},[378,1390,1391,437,1394,360],{},[434,1392,1393],{},"ntex 3 users",[381,1395,1396],{},"vld-ntex = { version = \"0.5\", default-features = false, features = [\"ntex-3\"] }",[378,1398,1399,1401,1402,360],{},[434,1400,216],{},": regenerate client schemas; defaults now accept ",[381,1403,489],{},[378,1405,1406,1408,1409,1412,1413,1416,1417,1419,1420,360],{},[434,1407,270],{},": derive ",[381,1410,1411],{},"clap::Parser"," (or implement ",[381,1414,1415],{},"CommandFactory",") for ",[381,1418,1235],{},", or call ",[381,1421,1422],{},"validate_cli",[378,1424,1425,437,1428,1102,1430,498,1433,1436],{},[434,1426,1427],{},"tower \u002F rama",[381,1429,1169],{},[381,1431,1432],{},"Option",[381,1434,1435],{},"try_validated"," is deprecated.",[378,1438,1439,1441,1442,360],{},[434,1440,23],{},": see ",[348,1443,1444],{"href":24},"MSRV.md",[370,1446,373],{"id":1447},"added-2",[375,1449,1450,1523,1528,1543,1576,1579,1584,1600,1612,1617,1630,1647,1667,1673,1684],{},[378,1451,1452,1453,1456,1457,486,1460,486,1463,486,1466,498,1469,486,1472,486,1475,498,1478,486,1481,486,1484,1487,1488,445,1491,498,1494,784,1497,1500,1501,784,1504,498,1507,498,1510,1513,1514,445,1517,445,1520,360],{},"Schemas: sized integers ",[381,1454,1455],{},"vld::i8()","…",[381,1458,1459],{},"u64()",[381,1461,1462],{},"isize()",[381,1464,1465],{},"usize()",[381,1467,1468],{},"vld::f32()",[381,1470,1471],{},"vld::null()",[381,1473,1474],{},"vld::never()",[381,1476,1477],{},"vld::char()",[381,1479,1480],{},"vld::from_serde()",[381,1482,1483],{},"vld::from_str()",[381,1485,1486],{},"vld::enum_of()","; time-of-day ",[381,1489,1490],{},"vld::{chrono,jiff,time}::time()",[381,1492,1493],{},"vld::time_of_day()",[381,1495,1496],{},"vld::record_with_keys()",[381,1498,1499],{},"ZRecord::ordered()","; tuples up to arity 12; string formats ",[381,1502,1503],{},"base64url()",[381,1505,1506],{},"json()",[381,1508,1509],{},"ZInt::coerce()",[381,1511,1512],{},"ZDecimal"," ",[381,1515,1516],{},"gt",[381,1518,1519],{},"lt",[381,1521,1522],{},"multiple_of",[378,1524,1525,1527],{},[381,1526,1158],{},": schema-aware fallback for values coerced from text.",[378,1529,1530,1533,1534,486,1537,486,1540,417],{},[381,1531,1532],{},"duration()"," accepts fractional seconds (",[381,1535,1536],{},"1.5",[381,1538,1539],{},"\"1.5s\"",[381,1541,1542],{},"\"PT1.5S\"",[378,1544,1545,1548,1549,486,1552,486,1555,486,1558,486,1561,498,1564,754,1567,445,1570,445,1573,360],{},[381,1546,1547],{},"ZFile::within(base)","; accessors on ",[381,1550,1551],{},"ZLiteral",[381,1553,1554],{},"ZMap",[381,1556,1557],{},"ZPipe",[381,1559,1560],{},"ZDiscriminatedUnion",[381,1562,1563],{},"ZLazy",[381,1565,1566],{},"type_error()",[381,1568,1569],{},"ZBoolean",[381,1571,1572],{},"ZEnum",[381,1574,1575],{},"ZJsonValue",[378,1577,1578],{},"Complete Russian, German and Spanish message tables; translated type names.",[378,1580,1581,1583],{},[381,1582,302],{}," (new crate): shared DB column wrappers, errors and form helpers for the integration crates.",[378,1585,1586,437,1588,1591,1592,1595,1596,1599],{},[381,1587,298],{},[381,1589,1590],{},"VldHttpError",", shared JSON \u002F form \u002F header \u002F cookie helpers, ",[381,1593,1594],{},"require_json_content_type",", a ",[381,1597,1598],{},"conformance"," test suite (test-only feature).",[378,1601,1602,1604,1605,409,1608,1611],{},[381,1603,252],{},": async ",[381,1606,1607],{},"AsyncRedisConn",[381,1609,1610],{},"aio"," feature); the selected redis crate is re-exported.",[378,1613,1614,1616],{},[381,1615,160],{},": ntex 4 support.",[378,1618,1619,437,1621,486,1624,486,1627,360],{},[381,1620,172],{},[381,1622,1623],{},"vld_413_catcher",[381,1625,1626],{},"vld_415_catcher",[381,1628,1629],{},"vld_catchers()",[378,1631,1632,437,1634,486,1637,1640,1641,445,1644,360],{},[381,1633,234],{},[381,1635,1636],{},"VldFloat",[381,1638,1639],{},"VldBool","; wrappers usable in ",[381,1642,1643],{},"Insertable",[381,1645,1646],{},".filter()",[378,1648,1649,437,1651,486,1654,486,1657,486,1660,486,1663,1666],{},[381,1650,238],{},[381,1652,1653],{},"with-json",[381,1655,1656],{},"with-chrono",[381,1658,1659],{},"with-uuid",[381,1661,1662],{},"with-rust_decimal",[381,1664,1665],{},"with-bigdecimal"," features.",[378,1668,1669,437,1671,360],{},[381,1670,270],{},[381,1672,1422],{},[378,1674,1675,1677,1678,486,1681,417],{},[381,1676,216],{},": named exports (",[381,1679,1680],{},"to_zod_export",[381,1682,1683],{},"to_valibot_export",[378,1685,1686,1688,1689,360],{},[381,1687,202],{},": OpenAPI 3.0 output under ",[381,1690,1691],{},"SchemaSettings::openapi3()",[370,1693,799],{"id":1694},"changed-1",[375,1696,1697,1703,1711,1723,1733],{},[378,1698,1699,1700,1702],{},"Faster parsing: ",[381,1701,976],{}," input is borrowed, cached field schemas (regexes compiled once), default messages rendered without allocations per key.",[378,1704,1705,1707,1708,1710],{},[381,1706,206],{}," reuses ",[381,1709,202],{}," instead of duplicating the bridge.",[378,1712,1713,1715,1716,486,1719,1722],{},[381,1714,220],{}," generates values that satisfy far more schemas (patterns, all core formats, ",[381,1717,1718],{},"$ref",[381,1720,1721],{},"multipleOf",", property counts) and seeds its randomness.",[378,1724,1725,1728,1729,1732],{},[381,1726,1727],{},"image"," is built without its default ",[381,1730,1731],{},"avif"," encoder (only image headers are read).",[378,1734,1735,1736,1739,1740,417],{},"Packages ship only ",[381,1737,1738],{},"src\u002F",", README, LICENSE (and the changelog for ",[381,1741,1742],{},"vld",[370,1744,774],{"id":1745},"fixed-1",[375,1747,1748,1764,1778,1784,1791,1800,1827,1844,1851,1862,1869,1877,1887,1901,1910,1925],{},[378,1749,1750,1751,1754,1755,1757,1758,784,1761,360],{},"Strings: char-safe ISO date\u002Ftime parsing (calendar-checked), strict IPv4\u002FIPv6\u002FCIDR via std, ",[381,1752,1753],{},"url_strict"," blocks loopback \u002F private \u002F link-local hosts, stricter email \u002F phone \u002F credit-card \u002F emoji \u002F cuid2, ",[381,1756,1503],{}," rejects ",[381,1759,1760],{},"+",[381,1762,1763],{},"\u002F",[378,1765,1766,1767,1770,1771,1773,1774,1777],{},"Numbers: exact ",[381,1768,1769],{},"ZInt"," (no f64 round-trip), NaN never passes a bound, tolerant ",[381,1772,1522],{},", the strictest bound is reported, ",[381,1775,1776],{},"f32::MAX"," accepted.",[378,1779,1780,1781,1783],{},"Collections \u002F combinators: an inner error without issues no longer turns into success; union errors keep per-variant issues; maps reject duplicate keys; unique compares numbers by value; no panics in intersection \u002F tuple \u002F ",[381,1782,759],{}," \u002F derive.",[378,1785,1786,1787,1790],{},"Dates: one strict format for all backends; ",[381,1788,1789],{},"time"," datetime defaults rendered as RFC 3339.",[378,1792,1793,445,1796,1799],{},[381,1794,1795],{},"ZPath::within",[381,1797,1798],{},"ZFile::within",": lexical containment with symlink resolution of existing ancestors; file reads are bounded.",[378,1801,1802,1803,1805,1806,1808,1809,1811,1812,1815,1816,1819,1820,1823,1824,1826],{},"JSON Schema \u002F OpenAPI: resolvable ",[381,1804,1718],{},"s and nested components for ",[381,1807,759],{}," and derive, ",[381,1810,497],{}," omits optional fields, literals emit ",[381,1813,1814],{},"const",", maps ",[381,1817,1818],{},"prefixItems",", records ",[381,1821,1822],{},"propertyNames"," \u002F min\u002FmaxProperties; ",[381,1825,887],{}," sees changes inside optional fields and composites.",[378,1828,1829,1830,445,1832,445,1835,445,1837,498,1840,1843],{},"Derive: generics, raw identifiers, serde ",[381,1831,691],{},[381,1833,1834],{},"rename(deserialize)",[381,1836,685],{},[381,1838,1839],{},"default",[381,1841,1842],{},"syn"," errors instead of panics.",[378,1845,1846,1847,1850],{},"Web adapters: body limits → 413 everywhere (ntex overflow detection, salvo forms, rocket mount paths and form limits, warp chunked bodies, rama limit errors), actix ",[381,1848,1849],{},"{id:\\d+}"," path patterns, percent-decoded path params and cookies, lossless query coercion, repeated keys as arrays.",[378,1852,1853,437,1855,445,1858,1861],{},[381,1854,256],{},[381,1856,1857],{},"nack_decode",[381,1859,1860],{},"reject_decode"," settle invalid messages instead of valid ones.",[378,1863,1864,1866,1867,360],{},[381,1865,238],{},": chrono \u002F uuid \u002F json \u002F decimal \u002F bytes columns no longer validate as ",[381,1868,489],{},[378,1870,1871,437,1873,1876],{},[381,1872,230],{},[381,1874,1875],{},"VldInt"," decodes INT4 \u002F INT2 columns.",[378,1878,1879,1881,1882,1884,1885,360],{},[381,1880,198],{},": annotations kept on refs \u002F composites \u002F arrays, ",[381,1883,708],{}," and type arrays supported, exact u64 bounds, tuple ",[381,1886,1818],{},[378,1888,1889,437,1891,1893,1894,486,1896,486,1899,360],{},[381,1890,202],{},[381,1892,1718],{},"s point at the generator's definitions path; the validator handles ",[381,1895,1718],{},[381,1897,1898],{},"additionalProperties",[381,1900,1818],{},[378,1902,1903,1905,1906,1909],{},[381,1904,216],{},": valid JS output (escaped literals, quoted keys, ",[381,1907,1908],{},"new RegExp","), descriptions and defaults kept.",[378,1911,1912,486,1914,486,1916,486,1918,486,1920,486,1922,1924],{},[381,1913,188],{},[381,1915,288],{},[381,1917,270],{},[381,1919,242],{},[381,1921,284],{},[381,1923,280],{},": clean issue paths.",[378,1926,1927,437,1929,1932,1933,360],{},[381,1928,266],{},[381,1930,1931],{},"VldConfigError::source()","; env example uses ",[381,1934,1935],{},"try_parsing",[370,1937,1939],{"id":1938},"security","Security",[375,1941,1942,1945,1956],{},[378,1943,1944],{},"All 0.4.7 security fixes (see below).",[378,1946,1947,437,1949,784,1952,1955],{},[381,1948,180],{},[381,1950,1951],{},"Application\u002FJSON",[381,1953,1954],{},"+json"," bodies no longer bypass validation; JSON bodies are size-limited.",[378,1957,1958,1959,417],{},"Dependencies refreshed: 21 of 23 RustSec advisories cleared (two remaining, documented in ",[381,1960,1961],{},"deny.toml",[370,1963,545],{"id":1964},"removed",[375,1966,1967,1973,1989],{},[378,1968,1969,1970,1972],{},"The ",[381,1971,878],{}," feature.",[378,1974,750,1975,1978,1979,1981,1982,1984,1985,1988],{},[381,1976,1977],{},"to_json_schema_inner()"," \u002F per-type ",[381,1980,1056],{}," duplicates (the ",[381,1983,1060],{}," trait remains; ",[381,1986,1987],{},"ZObject::to_json_schema"," stays).",[378,1990,1991,1994],{},[381,1992,1993],{},"vld-http-common::extract_path_param_names"," (unused).",[362,1996,1998,795],{"id":1997},"_047-2026-11-06",[366,1999,2000],{},"0.4.7",[370,2002,774],{"id":2003},"fixed-2",[375,2005,2006,2031,2042,2065,2085,2114,2132],{},[378,2007,2008,1513,2010,437,2012,2015,2016,2019,2020,2023,2024,2027,2028,360],{},[434,2009,1939],{},[381,2011,164],{},[381,2013,2014],{},"VldPath"," read the query string instead of the matched route parameters, so ",[381,2017,2018],{},"\u002Fusers\u002F42"," failed validation and ",[381,2021,2022],{},"\u002Fusers\u002F42?id=7"," validated ",[381,2025,2026],{},"id = 7"," (client-controlled). It now uses ",[381,2029,2030],{},"Request::path_params",[378,2032,2033,1513,2035,2037,2038,2041],{},[434,2034,1939],{},[381,2036,1742],{},": a string longer than 100 bytes whose 97th byte falls inside a multi-byte character (e.g. Cyrillic, accented Latin) panicked while being stored as ",[381,2039,2040],{},"received"," in an error — any request body could crash the process. Truncation is now char-based.",[378,2043,2044,1513,2046,437,2048,445,2051,445,2054,2057,2058,2061,2062,360],{},[434,2045,1939],{},[381,2047,1742],{},[381,2049,2050],{},"string().iso_date()",[381,2052,2053],{},"iso_time()",[381,2055,2056],{},"iso_datetime()"," panicked on non-ASCII input (",[381,2059,2060],{},"\"123é56789\"",") and on ",[381,2063,2064],{},"\"2024-01-01T\"",[378,2066,2067,1513,2069,409,2071,2073,2074,2077,2078,2081,2082,360],{},[434,2068,1939],{},[381,2070,1742],{},[381,2072,1789],{}," backend): ",[381,2075,2076],{},"datetime()"," panicked when the UTC instant left the supported year range (",[381,2079,2080],{},"\"9999-12-31T23:00:00-05:00\"","); it is now a validation error. Requires ",[381,2083,2084],{},"time >= 0.3.47",[378,2086,2087,1513,2089,437,2091,2094,2095,486,2098,486,2101,2104,2105,486,2108,784,2111,360],{},[434,2088,1939],{},[381,2090,1742],{},[381,2092,2093],{},"string().url_strict()"," never checked IPv6 hosts (",[381,2096,2097],{},"http:\u002F\u002F[::1]\u002F",[381,2099,2100],{},"http:\u002F\u002F[fd00::1]\u002F",[381,2102,2103],{},"http:\u002F\u002F[::ffff:127.0.0.1]\u002F"," passed) and allowed ",[381,2106,2107],{},"0.0.0.0",[381,2109,2110],{},"localhost.",[381,2112,2113],{},"*.localhost",[378,2115,2116,1513,2118,437,2120,2123,2124,2127,2128,2131],{},[434,2117,1939],{},[381,2119,1742],{},[381,2121,2122],{},"path().within(base)"," accepted ",[381,2125,2126],{},"base\u002F..\u002Foutside"," when the target did not exist (lexical ",[381,2129,2130],{},".."," was not resolved).",[378,2133,2134,1513,2136,2138],{},[434,2135,1939],{},[381,2137,298],{},": with duplicate cookie names the last value won, allowing cookie tossing; the first occurrence now wins.",[362,2140,2142,2145],{"id":2141},"_046-2026-11-05",[366,2143,2144],{},"0.4.6"," - 2026-11-05",[370,2147,774],{"id":2148},"fixed-3",[375,2150,2151,2177],{},[378,2152,2153,2154,2157,2158,409,2161,2166,2167,2169,2170,2173,2174],{},"JSON Schema \u002F OpenAPI: ",[381,2155,2156],{},".with_default(value)"," now emits ",[381,2159,2160],{},"\"default\": value",[348,2162,2165],{"href":2163,"rel":2164},"https:\u002F\u002Fgithub.com\u002Fs00d\u002Fvld\u002Fissues\u002F8",[352],"#8","). The ",[381,2168,1060],{}," impl for ",[381,2171,2172],{},"ZDefault"," requires the output type to be ",[381,2175,2176],{},"serde::Serialize",[378,2178,2179,486,2182,486,2185,2187,2188,2191,2192,2194,2195,2197],{},[381,2180,2181],{},"chrono",[381,2183,2184],{},"jiff",[381,2186,1789],{}," (human-readable) and ",[381,2189,2190],{},"ipnet"," optional deps now enable their ",[381,2193,810],{}," features so date\u002Fnetwork outputs keep working with ",[381,2196,1214],{}," in schemas",[362,2199,2201,2204],{"id":2200},"_045-2026-10-01",[366,2202,2203],{},"0.4.5"," - 2026-10-01",[370,2206,774],{"id":2207},"fixed-4",[375,2209,2210,2236,2255,2261,2272],{},[378,2211,2212,2213,1763,2216,2219,2220,2223,2224,2227,2228,2231,2232,2235],{},"HTTP adapters: enforce body size limits (axum ",[381,2214,2215],{},"Bytes",[381,2217,2218],{},"DefaultBodyLimit",", warp ",[381,2221,2222],{},"content_length_limit",", poem ",[381,2225,2226],{},"into_bytes_limit",", rama ",[381,2229,2230],{},"Body::limited",") and return ",[434,2233,2234],{},"413"," on overflow",[378,2237,2238,1513,2240,2242,2243,490,2246,784,2249,490,2252,2254],{},[381,2239,184],{},[381,2241,1186],{},": map ",[381,2244,2245],{},"LengthRequired",[434,2247,2248],{},"411",[381,2250,2251],{},"PayloadTooLarge",[434,2253,2234],{}," (no longer collapse to 404)",[378,2256,2257,2258,2260],{},"actix\u002Fntex\u002Fsalvo: remapped payload overflow to ",[434,2259,2234],{}," instead of always 422",[378,2262,2263,2264,2267,2268,2271],{},"poem: malformed JSON uses ",[381,2265,2266],{},"format_vld_error"," (422); rama ",[381,2269,2270],{},"ValidateJsonLayer"," aligned to 422 + validation body",[378,2273,2274,2276,2277,1416,2280,445,2283],{},[381,2275,298],{},": consistent issue path formatting (",[381,2278,2279],{},".user.age",[381,2281,2282],{},"format_issues",[381,2284,2285],{},"format_issues_with_code",[362,2287,2289,2204],{"id":2288},"_044-2026-10-01",[366,2290,2291],{},"0.4.4",[370,2293,799],{"id":2294},"changed-2",[375,2296,2297,2315,2340,2362],{},[378,2298,2299,2300,2303,2304,2307,2308,2310,2311,2314],{},"Bump optional core pins: ",[381,2301,2302],{},"infer"," 0.22, ",[381,2305,2306],{},"rust_decimal"," 1.43, ",[381,2309,2190],{}," 2.12.2, ",[381,2312,2313],{},"phonenumber"," 0.3.10",[378,2316,2317,2319,2320,2323,2324,2327,2328,2331,2332,2335,2336,2339],{},[381,2318,176],{},": Salvo ",[434,2321,2322],{},"1.x"," only (",[381,2325,2326],{},"salvo = \"1\"","); crate MSRV 1.94 (cross-major ",[381,2329,2330],{},">=0.89,\u003C2"," dual-loads ",[381,2333,2334],{},"salvo_core"," \u002F breaks ",[381,2337,2338],{},"Extractible",")",[378,2341,2342,2344,2345,2348,2349,498,2352,2355,2356,2358,2359],{},[381,2343,238],{},": dual features ",[381,2346,2347],{},"sea-orm-1"," (default) \u002F ",[381,2350,2351],{},"sea-orm-2",[381,2353,2354],{},"Value::Enum"," → JSON string on 2.x; entity-macro integration tests stay on 1.x; ",[381,2357,2351],{}," requires Rust ",[434,2360,2361],{},"1.94+",[378,2363,2364,2344,2366,2348,2369,2372,2373,2358,2375],{},[381,2365,198],{},[381,2367,2368],{},"utoipa-5",[381,2370,2371],{},"utoipa-6"," (CI tests both); ",[381,2374,2371],{},[434,2376,2377],{},"1.88+",[370,2379,2381],{"id":2380},"deferred","Deferred",[375,2383,2384],{},[378,2385,2386,2388],{},[381,2387,1842],{}," 3, ntex 4 (beta), aide 0.16 (alpha) — wait for stable \u002F lower churn",[362,2390,2392,2204],{"id":2391},"_043-2026-10-01",[366,2393,2394],{},"0.4.3",[370,2396,774],{"id":2397},"fixed-5",[375,2399,2400,2429,2436],{},[378,2401,2402,2403,445,2406,445,2409,2412,2413,2415,2416,2419,2420,486,2422,2424,2425,2428],{},"Omit ",[381,2404,2405],{},".optional()",[381,2407,2408],{},".nullish()",[381,2410,2411],{},".with_default()"," fields from JSON Schema ",[381,2414,497],{}," (and keep ",[381,2417,2418],{},".nullable()"," required) across ",[381,2421,759],{},[381,2423,84],{},", and ",[381,2426,2427],{},"ZObject"," (#6)",[378,2430,2431,2432,2435],{},"Forward ",[381,2433,2434],{},"JsonSchema::is_required"," through describe\u002Frefine\u002Fmessage\u002Ftransform\u002Fcatch wrappers",[378,2437,2438,2441,2442,2444,2445,2447,2448,2339],{},[381,2439,2440],{},"vld-utoipa::json_schema_to_params"," uses the object ",[381,2443,497],{}," array (so ",[381,2446,2418],{}," query\u002Fpath params stay required; oneOf+null no longer forces ",[381,2449,2450],{},"Required::False",[362,2452,2454,2457],{"id":2453},"_042-2026-09-27",[366,2455,2456],{},"0.4.2"," - 2026-09-27",[370,2459,373],{"id":2460},"added-3",[375,2462,2463],{},[378,2464,2465],{},"Add vld-rama for Rama HTTP validation",[370,2467,774],{"id":2468},"fixed-6",[375,2470,2471,2474],{},[378,2472,2473],{},"Bring VldSchema into schema! OpenAPI helpers",[378,2475,2476],{},"Drop unused VldSchema imports after schema! fix",[362,2478,2480,2483],{"id":2479},"_041-2026-09-26",[366,2481,2482],{},"0.4.1"," - 2026-09-26",[370,2485,774],{"id":2486},"fixed-7",[375,2488,2489,2492],{},[378,2490,2491],{},"Register transitive nested OpenAPI schemas",[378,2493,2494],{},"Alias NestedSchemaCollectFn for clippy type_complexity",[362,2496,2498,2501],{"id":2497},"_040-2026-07-02",[366,2499,2500],{},"0.4.0"," - 2026-07-02",[370,2503,799],{"id":2504},"changed-3",[375,2506,2507,2510],{},[378,2508,2509],{},"Refresh crate links and dependency versions",[378,2511,2512],{},"Enhance build and test process for vld-diesel",[370,2514,774],{"id":2515},"fixed-8",[375,2517,2518,2521],{},[378,2519,2520],{},"Make path-within check deterministic in CI",[378,2522,2523],{},"Restore integration examples and tests build",[370,2525,2526],{"id":2526},"chore",[375,2528,2529,2532,2535,2538,2541],{},[378,2530,2531],{},"Downgrade workspace and crate versions to 0.3.0",[378,2533,2534],{},"Update dependencies and versions in Cargo files",[378,2536,2537],{},"Normalize integration dependency compatibility",[378,2539,2540],{},"Implement workspace-wide pre-release hook and update preflight script",[378,2542,2543],{},"Update pre-release hook and streamline release preflight script",[370,2545,2546],{"id":2546},"ci",[375,2548,2549],{},[378,2550,2551],{},"Unify workspace checks and restore crate version badges",[370,2553,2554],{"id":2554},"release",[375,2556,2557],{},[378,2558,2559],{},"V0.4.0 — unified utoipa OpenAPI, jiff\u002Ftime date backends",[362,2561,2563,2566],{"id":2562},"_030-2026-03-20",[366,2564,2565],{},"0.3.0"," - 2026-03-20",[370,2568,373],{"id":2569},"added-4",[375,2571,2572,2575,2578,2581,2584],{},[378,2573,2574],{},"Add native vld transport integrations",[378,2576,2577],{},"Add bytes schema and stricter datetime validation",[378,2579,2580],{},"Add timezone-aware datetime and file schema validation",[378,2582,2583],{},"Extend file storage access and refresh formatting",[378,2585,2586],{},"Add advanced typed schemas and cross-crate format support",[370,2588,799],{"id":2589},"changed-4",[375,2591,2592,2595,2598],{},[378,2593,2594],{},"Simplify Zod\u002FValibot generation API",[378,2596,2597],{},"Remove unused full-file generation internals",[378,2599,2600],{},"Gate heavy validators behind opt-in features",[370,2602,774],{"id":2603},"fixed-9",[375,2605,2606,2609,2612,2615,2618,2621,2623,2626,2629],{},[378,2607,2608],{},"Run per-crate preflight safely",[378,2610,2611],{},"Satisfy strict clippy assertions",[378,2613,2614],{},"Replace approximate float constant in test",[378,2616,2617],{},"Keep float coercion expectation exact",[378,2619,2620],{},"Remove unused prelude imports",[378,2622,2620],{},[378,2624,2625],{},"Remove unused VldSchema import in tests",[378,2627,2628],{},"Align prelude trait imports for optional combinators",[378,2630,2631],{},"Stabilize clippy around optional combinator trait imports",[370,2633,2526],{"id":2634},"chore-1",[375,2636,2637],{},[378,2638,2639],{},"Automate changelog generation with git-cliff",[362,2641,2643,2646],{"id":2642},"_020-2026-03-19",[366,2644,2645],{},"0.2.0"," - 2026-03-19",[370,2648,373],{"id":2649},"added-5",[375,2651,2652,2655,2658,2661,2664,2667,2670,2673,2676,2679,2682,2685],{},[378,2653,2654],{},"Add tonic gRPC integration for vld validation",[378,2656,2657],{},"Add Leptos integration for shared server\u002FWASM validation",[378,2659,2660],{},"Add SQLx integration for vld validation",[378,2662,2663],{},"Add Dioxus integration for shared server\u002FWASM validation",[378,2665,2666],{},"Add ntex web framework integration",[378,2668,2669],{},"Add aide\u002Fschemars integration for OpenAPI generation",[378,2671,2672],{},"Add SurrealDB integration for JSON document validation",[378,2674,2675],{},"Add bidirectional bridge between vld and schemars",[378,2677,2678],{},"Add reverse direction — schemars → vld validation",[378,2680,2681],{},"Add nested schema auto-registration for OpenAPI",[378,2683,2684],{},"Auto-register nested schemas in utoipa components",[378,2686,2687],{},"Auto-register nested schemas in schemars definitions",[370,2689,799],{"id":2690},"changed-5",[375,2692,2693,2696,2699],{},[378,2694,2695],{},"Replace standalone functions with macro+trait API",[378,2697,2698],{},"Add nested schema auto-registration section to README",[378,2700,2701],{},"Add dead code allowance for unused schema methods",[370,2703,774],{"id":2704},"fixed-10",[375,2706,2707],{},[378,2708,2709],{},"Formatting, clippy warnings, and missing imports across workspace",[370,2711,2526],{"id":2712},"chore-2",[375,2714,2715,2718,2721,2724,2727,2730,2733],{},[378,2716,2717],{},"Register vld-tonic and vld-leptos in workspace, update root README",[378,2719,2720],{},"Register vld-sqlx in workspace, update root README",[378,2722,2723],{},"Register vld-dioxus in workspace, update root README",[378,2725,2726],{},"Register vld-ntex in workspace, update root README",[378,2728,2729],{},"Register vld-aide in workspace, update root README",[378,2731,2732],{},"Register vld-surrealdb in workspace, update root README",[378,2734,2735],{},"Register vld-schemars in workspace, update root README",[362,2737,2739,2646],{"id":2738},"_013-2026-03-19",[366,2740,2741],{},"0.1.3",[370,2743,373],{"id":2744},"added-6",[375,2746,2747,2750],{},[378,2748,2749],{},"Add health check endpoint and response schemas",[378,2751,2752],{},"Generate json_schema() for derive(Validate), enabling utoipa integration",[370,2754,2526],{"id":2755},"chore-3",[375,2757,2758,2761],{},[378,2759,2760],{},"Bump workspace version to 0.1.2",[378,2762,2763],{},"Remove .idea\u002F from git tracking",{"title":2765,"searchDepth":2766,"depth":2767,"links":2768},"",2,3,[2769,2772,2779,2783,2793,2797,2801,2805,2810,2814,2819,2823,2831,2838,2845],{"id":364,"depth":2766,"text":368,"children":2770},[2771],{"id":372,"depth":2767,"text":373},{"id":420,"depth":2766,"text":2773,"children":2774},"0.6.0 - 2026-11-07",[2775,2776,2777,2778],{"id":427,"depth":2767,"text":428},{"id":613,"depth":2767,"text":614},{"id":625,"depth":2767,"text":373},{"id":773,"depth":2767,"text":774},{"id":791,"depth":2766,"text":2780,"children":2781},"0.5.1 - 2026-11-06",[2782],{"id":798,"depth":2767,"text":799},{"id":861,"depth":2766,"text":2784,"children":2785},"0.5.0 - 2026-11-06",[2786,2787,2788,2789,2790,2791,2792],{"id":867,"depth":2767,"text":428},{"id":1263,"depth":2767,"text":1264},{"id":1447,"depth":2767,"text":373},{"id":1694,"depth":2767,"text":799},{"id":1745,"depth":2767,"text":774},{"id":1938,"depth":2767,"text":1939},{"id":1964,"depth":2767,"text":545},{"id":1997,"depth":2766,"text":2794,"children":2795},"0.4.7 - 2026-11-06",[2796],{"id":2003,"depth":2767,"text":774},{"id":2141,"depth":2766,"text":2798,"children":2799},"0.4.6 - 2026-11-05",[2800],{"id":2148,"depth":2767,"text":774},{"id":2200,"depth":2766,"text":2802,"children":2803},"0.4.5 - 2026-10-01",[2804],{"id":2207,"depth":2767,"text":774},{"id":2288,"depth":2766,"text":2806,"children":2807},"0.4.4 - 2026-10-01",[2808,2809],{"id":2294,"depth":2767,"text":799},{"id":2380,"depth":2767,"text":2381},{"id":2391,"depth":2766,"text":2811,"children":2812},"0.4.3 - 2026-10-01",[2813],{"id":2397,"depth":2767,"text":774},{"id":2453,"depth":2766,"text":2815,"children":2816},"0.4.2 - 2026-09-27",[2817,2818],{"id":2460,"depth":2767,"text":373},{"id":2468,"depth":2767,"text":774},{"id":2479,"depth":2766,"text":2820,"children":2821},"0.4.1 - 2026-09-26",[2822],{"id":2486,"depth":2767,"text":774},{"id":2497,"depth":2766,"text":2824,"children":2825},"0.4.0 - 2026-07-02",[2826,2827,2828,2829,2830],{"id":2504,"depth":2767,"text":799},{"id":2515,"depth":2767,"text":774},{"id":2526,"depth":2767,"text":2526},{"id":2546,"depth":2767,"text":2546},{"id":2554,"depth":2767,"text":2554},{"id":2562,"depth":2766,"text":2832,"children":2833},"0.3.0 - 2026-03-20",[2834,2835,2836,2837],{"id":2569,"depth":2767,"text":373},{"id":2589,"depth":2767,"text":799},{"id":2603,"depth":2767,"text":774},{"id":2634,"depth":2767,"text":2526},{"id":2642,"depth":2766,"text":2839,"children":2840},"0.2.0 - 2026-03-19",[2841,2842,2843,2844],{"id":2649,"depth":2767,"text":373},{"id":2690,"depth":2767,"text":799},{"id":2704,"depth":2767,"text":774},{"id":2712,"depth":2767,"text":2526},{"id":2738,"depth":2766,"text":2846,"children":2847},"0.1.3 - 2026-03-19",[2848,2849],{"id":2744,"depth":2767,"text":373},{"id":2755,"depth":2767,"text":2526},"All notable changes to vld and its integration crates.","md",null,{},true,{"title":332,"description":2850},"84Y-4ZaDWp8XwUCJOv_GK3FqdIOGC7_xE42mB585BI4",[2858,2852],{"title":328,"path":329,"stem":330,"description":2859,"children":-1},"Short answers to common questions.",1794036356984]