[{"data":1,"prerenderedAt":2406},["ShallowReactive",2],{"navigation":3,"\u002Fguides\u002Fmigration":335,"\u002Fguides\u002Fmigration-surround":2401},[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":312,"body":337,"description":2395,"extension":2396,"links":2397,"meta":2398,"navigation":1418,"path":313,"seo":2399,"stem":314,"__hash__":2400},"docs\u002F7.guides\u002F1.migration.md",{"type":338,"value":339,"toc":2373},"minimark",[340,345,350,388,546,554,558,615,622,626,647,651,885,889,906,910,916,920,940,1058,1062,1074,1103,1243,1246,1250,1284,1629,1664,1668,1693,1707,1711,1730,1845,1864,1868,1903,1907,1927,1940,1944,1964,2039,2043,2093,2098,2102,2259,2360,2364,2369],[341,342,344],"h2",{"id":343},"_05-06","0.5 → 0.6",[346,347,349],"h3",{"id":348},"regular-expressions","Regular expressions",[351,352,353,357,358,361,362,365,366,369,370,373,374,377,378,361,381,384,385,387],"p",{},[354,355,356],"code",{},"regex-lite"," is no longer part of the public API: ",[354,359,360],{},"string().regex(Regex)"," \u002F ",[354,363,364],{},"regex_msg"," and the ",[354,367,368],{},"vld::regex_lite"," re-export are gone. Use ",[354,371,372],{},"pattern"," (same ",[354,375,376],{},"regex"," feature, same issue code ",[354,379,380],{},"invalid_string",[354,382,383],{},"Regex",", same JSON Schema ",[354,386,372],{},"):",[389,390,395],"pre",{"className":391,"code":392,"language":393,"meta":394,"style":394},"language-rust shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F before\nvld::string().regex(vld::regex_lite::Regex::new(r\"^[A-Z]{3}$\").unwrap())\n\u002F\u002F after\nvld::string().pattern(r\"^[A-Z]{3}$\")\n\u002F\u002F an invalid pattern you want to handle instead of panicking\nvld::string().pattern(vld::rules::Pattern::new(src)?)\n","rust","",[354,396,397,406,468,474,500,506],{"__ignoreMap":394},[398,399,402],"span",{"class":400,"line":401},"line",1,[398,403,405],{"class":404},"sHwdD","\u002F\u002F before\n",[398,407,409,413,417,421,424,426,429,431,433,436,438,440,442,445,447,451,454,457,459,462,465],{"class":400,"line":408},2,[398,410,412],{"class":411},"sBMFI","vld",[398,414,416],{"class":415},"sMK4o","::",[398,418,420],{"class":419},"s2Zo4","string",[398,422,423],{"class":415},"().",[398,425,376],{"class":419},[398,427,428],{"class":415},"(",[398,430,412],{"class":411},[398,432,416],{"class":415},[398,434,435],{"class":411},"regex_lite",[398,437,416],{"class":415},[398,439,383],{"class":411},[398,441,416],{"class":415},[398,443,444],{"class":419},"new",[398,446,428],{"class":415},[398,448,450],{"class":449},"sfazB","r",[398,452,453],{"class":415},"\"",[398,455,456],{"class":449},"^[A-Z]{3}$",[398,458,453],{"class":415},[398,460,461],{"class":415},").",[398,463,464],{"class":419},"unwrap",[398,466,467],{"class":415},"())\n",[398,469,471],{"class":400,"line":470},3,[398,472,473],{"class":404},"\u002F\u002F after\n",[398,475,477,479,481,483,485,487,489,491,493,495,497],{"class":400,"line":476},4,[398,478,412],{"class":411},[398,480,416],{"class":415},[398,482,420],{"class":419},[398,484,423],{"class":415},[398,486,372],{"class":419},[398,488,428],{"class":415},[398,490,450],{"class":449},[398,492,453],{"class":415},[398,494,456],{"class":449},[398,496,453],{"class":415},[398,498,499],{"class":415},")\n",[398,501,503],{"class":400,"line":502},5,[398,504,505],{"class":404},"\u002F\u002F an invalid pattern you want to handle instead of panicking\n",[398,507,509,511,513,515,517,519,521,523,525,528,530,533,535,537,539,543],{"class":400,"line":508},6,[398,510,412],{"class":411},[398,512,416],{"class":415},[398,514,420],{"class":419},[398,516,423],{"class":415},[398,518,372],{"class":419},[398,520,428],{"class":415},[398,522,412],{"class":411},[398,524,416],{"class":415},[398,526,527],{"class":411},"rules",[398,529,416],{"class":415},[398,531,532],{"class":411},"Pattern",[398,534,416],{"class":415},[398,536,444],{"class":419},[398,538,428],{"class":415},[398,540,542],{"class":541},"sTEyZ","src",[398,544,545],{"class":415},")?)\n",[351,547,548,549,553],{},"For checks that are easier in Rust than in a regex, see ",[550,551,552],"a",{"href":39},"custom rules",".",[346,555,557],{"id":556},"optional-nullable-nullish","optional, nullable, nullish",[559,560,561,589,604],"ul",{},[562,563,564,567,568,572,573,576,577,580,581,584,585,588],"li",{},[354,565,566],{},"nullable()"," fields are now ",[569,570,571],"strong",{},"required",": an absent key fails with ",[354,574,575],{},"missing_field"," (a present ",[354,578,579],{},"null"," is still ",[354,582,583],{},"None","). Use ",[354,586,587],{},"nullish()"," where the key may be left out.",[562,590,591,594,595,597,598,601,602,553],{},[354,592,593],{},"optional()"," no longer adds ",[354,596,579],{}," to its JSON Schema (TypeScript ",[354,599,600],{},"x?: T","); parsing still accepts ",[354,603,579],{},[562,605,606,608,609,611,612,461],{},[354,607,566],{}," is in ",[354,610,571],{}," in JSON Schema (TypeScript ",[354,613,614],{},"x: T | null",[351,616,617,618,553],{},"See the ",[550,619,621],{"href":620},"\u002Fschemas\u002Fmodifiers#optional-nullable-nullish","table",[346,623,625],{"id":624},"unions-serialize-as-plain-values","Unions serialize as plain values",[351,627,628,361,631,634,635,638,639,642,643,646],{},[354,629,630],{},"Either",[354,632,633],{},"Either3"," are serde ",[354,636,637],{},"untagged"," now: ",[354,640,641],{},"{\"Left\": \"x\"}"," becomes ",[354,644,645],{},"\"x\"",". Code that stored or sent the tagged form must use the bare value.",[346,648,650],{"id":649},"removed","Removed",[621,652,653,665],{},[654,655,656],"thead",{},[657,658,659,662],"tr",{},[660,661,650],"th",{},[660,663,664],{},"Use",[666,667,668,687,701,713,726,738,753,765,783,799,814,835,859],"tbody",{},[657,669,670,681],{},[671,672,673,674,677,678],"td",{},"features ",[354,675,676],{},"serialize",", ",[354,679,680],{},"deserialize",[671,682,683,684],{},"nothing (serde support is always on): drop them from ",[354,685,686],{},"features",[657,688,689,694],{},[671,690,691],{},[354,692,693],{},"ZFloat::finite()",[671,695,696,697,700],{},"nothing: JSON has no ",[354,698,699],{},"NaN"," \u002F infinity",[657,702,703,708],{},[671,704,705],{},[354,706,707],{},"ZObject::field_schema()",[671,709,710],{},[354,711,712],{},"field()",[657,714,715,720],{},[671,716,717],{},[354,718,719],{},"ZObject::deep_partial()",[671,721,722,725],{},[354,723,724],{},"partial()"," on each nested object",[657,727,728,733],{},[671,729,730],{},[354,731,732],{},"vld-actix::VldJsonError",[671,734,735],{},[354,736,737],{},"VldActixError",[657,739,740,748],{},[671,741,742,677,745],{},[354,743,744],{},"vld-diesel::validate_update",[354,746,747],{},"vld-sqlx::validate_update",[671,749,750],{},[354,751,752],{},"validate_insert",[657,754,755,760],{},[671,756,757],{},[354,758,759],{},"vld-surrealdb::validate_record",[671,761,762],{},[354,763,764],{},"validate_content",[657,766,767,775],{},[671,768,769,361,772],{},[354,770,771],{},"vld-http-common::ValidationIssueWithCode",[354,773,774],{},"format_issues_with_code",[671,776,777,361,780],{},[354,778,779],{},"ValidationIssue",[354,781,782],{},"format_issues",[657,784,785,793],{},[671,786,787,361,790],{},[354,788,789],{},"vld-http-common::format_json_parse_error",[354,791,792],{},"format_utf8_error",[671,794,795,798],{},[354,796,797],{},"VldHttpError::parse"," (the adapters already answer with it)",[657,800,801,809],{},[671,802,803,677,806],{},[354,804,805],{},"vld-tower::try_validated",[354,807,808],{},"vld-rama::try_validated",[671,810,811],{},[354,812,813],{},"validated()",[657,815,816,830],{},[671,817,818,361,821,361,824,361,827],{},[354,819,820],{},"vld-tauri::validate_event",[354,822,823],{},"validate_state",[354,825,826],{},"validate_plugin_config",[354,828,829],{},"validate_channel_message",[671,831,832],{},[354,833,834],{},"validate",[657,836,837,848],{},[671,838,839,677,842,677,845],{},[354,840,841],{},"impl_to_lapin!",[354,843,844],{},"impl_to_redis!",[354,846,847],{},"impl_to_redis_async!",[671,849,850,677,853,677,856],{},[354,851,852],{},"LapinChannel::new(ch)",[354,854,855],{},"RedisConn::new(conn)",[354,857,858],{},"AsyncRedisConn::new(conn)",[657,860,861,872],{},[671,862,863,677,866,677,869],{},[354,864,865],{},"vld-utoipa::impl_into_params!",[354,867,868],{},"impl_to_schema_query!",[354,870,871],{},"impl_to_schema_path!",[671,873,874,877,878,881,882],{},[354,875,876],{},"#[into_params(parameter_in = ...)]"," + ",[354,879,880],{},"impl_to_schema!(T)",", or ",[354,883,884],{},"impl_to_schema!(T, query)",[346,886,888],{"id":887},"custom-dynschema-impls","Custom DynSchema impls",[351,890,891,894,895,898,899,902,903,905],{},[354,892,893],{},"DynSchema"," has a new required method ",[354,896,897],{},"dyn_parse_missing"," (implemented for every ",[354,900,901],{},"VldSchema"," automatically). Only a hand-written ",[354,904,893],{}," impl needs it: return what an absent object key should give.",[341,907,909],{"id":908},"_04-05","0.4 → 0.5",[351,911,912,913,553],{},"vld 0.5 makes features additive, gives every built-in check a typed issue code and aligns all web adapters on one set of status codes. Most applications only need the first three steps. The full list of changes is in the ",[550,914,915],{"href":333},"changelog",[346,917,919],{"id":918},"_1-cargo-features","1. Cargo features",[351,921,922,923,926,927,929,930,932,933,936,937,553],{},"The ",[354,924,925],{},"std"," feature is gone (everything it gated is always on). ",[354,928,676],{}," and ",[354,931,680],{}," are deprecated no-ops and will be removed in 0.6. ",[354,934,935],{},"diff"," now enables ",[354,938,939],{},"openapi",[389,941,945],{"className":942,"code":943,"language":944,"meta":394,"style":394},"language-toml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# before\nvld = { version = \"0.4\", features = [\"std\", \"serialize\", \"derive\"] }\n# after\nvld = { version = \"0.5\", features = [\"derive\"] }\n","toml",[354,946,947,952,1016,1021],{"__ignoreMap":394},[398,948,949],{"class":400,"line":401},[398,950,951],{"class":404},"# before\n",[398,953,954,957,960,963,966,968,971,974,976,979,982,984,987,989,991,993,995,997,999,1001,1003,1005,1008,1010,1013],{"class":400,"line":408},[398,955,956],{"class":541},"vld ",[398,958,959],{"class":415},"=",[398,961,962],{"class":415}," {",[398,964,965],{"class":541}," version ",[398,967,959],{"class":415},[398,969,970],{"class":415}," \"",[398,972,973],{"class":449},"0.4",[398,975,453],{"class":415},[398,977,978],{"class":415},",",[398,980,981],{"class":541}," features ",[398,983,959],{"class":415},[398,985,986],{"class":415}," [",[398,988,453],{"class":415},[398,990,925],{"class":449},[398,992,453],{"class":415},[398,994,978],{"class":415},[398,996,970],{"class":415},[398,998,676],{"class":449},[398,1000,453],{"class":415},[398,1002,978],{"class":415},[398,1004,970],{"class":415},[398,1006,1007],{"class":449},"derive",[398,1009,453],{"class":415},[398,1011,1012],{"class":415},"]",[398,1014,1015],{"class":415}," }\n",[398,1017,1018],{"class":400,"line":470},[398,1019,1020],{"class":404},"# after\n",[398,1022,1023,1025,1027,1029,1031,1033,1035,1038,1040,1042,1044,1046,1048,1050,1052,1054,1056],{"class":400,"line":476},[398,1024,956],{"class":541},[398,1026,959],{"class":415},[398,1028,962],{"class":415},[398,1030,965],{"class":541},[398,1032,959],{"class":415},[398,1034,970],{"class":415},[398,1036,1037],{"class":449},"0.5",[398,1039,453],{"class":415},[398,1041,978],{"class":415},[398,1043,981],{"class":541},[398,1045,959],{"class":415},[398,1047,986],{"class":415},[398,1049,453],{"class":415},[398,1051,1007],{"class":449},[398,1053,453],{"class":415},[398,1055,1012],{"class":415},[398,1057,1015],{"class":415},[346,1059,1061],{"id":1060},"_2-date-backends","2. Date backends",[351,1063,1064,677,1067,929,1070,1073],{},[354,1065,1066],{},"chrono",[354,1068,1069],{},"jiff",[354,1071,1072],{},"time"," are additive; each has its own module. Before, enabling several picked one silently (chrono > jiff > time).",[559,1075,1076,1097],{},[562,1077,1078,1079,1082,1083,677,1086,1089,1090,361,1093,1096],{},"With ",[569,1080,1081],{},"one"," backend nothing changes: ",[354,1084,1085],{},"vld::date()",[354,1087,1088],{},"vld::datetime()"," and the prelude ",[354,1091,1092],{},"ZDate",[354,1094,1095],{},"ZDateTime"," still work.",[562,1098,1078,1099,1102],{},[569,1100,1101],{},"several",", call the module:",[389,1104,1106],{"className":391,"code":1105,"language":393,"meta":394,"style":394},"\u002F\u002F before (0.4): whichever backend won\nlet d = vld::date();\n\u002F\u002F after (0.5)\nlet d = vld::chrono::date();\nlet t = vld::jiff::datetime();\nlet tod = vld::time::time(); \u002F\u002F new: time of day\nlet ty: vld::chrono::ZDate = vld::chrono::date();\n",[354,1107,1108,1113,1135,1140,1160,1182,1207],{"__ignoreMap":394},[398,1109,1110],{"class":400,"line":401},[398,1111,1112],{"class":404},"\u002F\u002F before (0.4): whichever backend won\n",[398,1114,1115,1119,1122,1124,1127,1129,1132],{"class":400,"line":408},[398,1116,1118],{"class":1117},"spNyl","let",[398,1120,1121],{"class":541}," d ",[398,1123,959],{"class":415},[398,1125,1126],{"class":411}," vld",[398,1128,416],{"class":415},[398,1130,1131],{"class":419},"date",[398,1133,1134],{"class":415},"();\n",[398,1136,1137],{"class":400,"line":470},[398,1138,1139],{"class":404},"\u002F\u002F after (0.5)\n",[398,1141,1142,1144,1146,1148,1150,1152,1154,1156,1158],{"class":400,"line":476},[398,1143,1118],{"class":1117},[398,1145,1121],{"class":541},[398,1147,959],{"class":415},[398,1149,1126],{"class":411},[398,1151,416],{"class":415},[398,1153,1066],{"class":411},[398,1155,416],{"class":415},[398,1157,1131],{"class":419},[398,1159,1134],{"class":415},[398,1161,1162,1164,1167,1169,1171,1173,1175,1177,1180],{"class":400,"line":502},[398,1163,1118],{"class":1117},[398,1165,1166],{"class":541}," t ",[398,1168,959],{"class":415},[398,1170,1126],{"class":411},[398,1172,416],{"class":415},[398,1174,1069],{"class":411},[398,1176,416],{"class":415},[398,1178,1179],{"class":419},"datetime",[398,1181,1134],{"class":415},[398,1183,1184,1186,1189,1191,1193,1195,1197,1199,1201,1204],{"class":400,"line":508},[398,1185,1118],{"class":1117},[398,1187,1188],{"class":541}," tod ",[398,1190,959],{"class":415},[398,1192,1126],{"class":411},[398,1194,416],{"class":415},[398,1196,1072],{"class":411},[398,1198,416],{"class":415},[398,1200,1072],{"class":419},[398,1202,1203],{"class":415},"();",[398,1205,1206],{"class":404}," \u002F\u002F new: time of day\n",[398,1208,1210,1212,1215,1218,1220,1222,1224,1226,1228,1231,1233,1235,1237,1239,1241],{"class":400,"line":1209},7,[398,1211,1118],{"class":1117},[398,1213,1214],{"class":541}," ty",[398,1216,1217],{"class":415},":",[398,1219,1126],{"class":411},[398,1221,416],{"class":415},[398,1223,1066],{"class":411},[398,1225,416],{"class":415},[398,1227,1092],{"class":411},[398,1229,1230],{"class":415}," =",[398,1232,1126],{"class":411},[398,1234,416],{"class":415},[398,1236,1066],{"class":411},[398,1238,416],{"class":415},[398,1240,1131],{"class":419},[398,1242,1134],{"class":415},[351,1244,1245],{},"Libraries should always use the module form, because an application can enable a second backend through feature unification.",[346,1247,1249],{"id":1248},"_3-issue-codes","3. Issue codes",[351,1251,1252,1253,1256,1257,1260,1261,361,1264,1267,1268,1271,1272,677,1274,929,1277,1280,1281,553],{},"Every built-in check has a typed ",[354,1254,1255],{},"IssueCode"," variant; ",[354,1258,1259],{},"Custom"," is only for your own codes. ",[354,1262,1263],{},"TooSmall",[354,1265,1266],{},"TooBig"," carry ",[354,1269,1270],{},"origin: SizeOrigin"," and a JSON bound. ",[354,1273,1255],{},[354,1275,1276],{},"StringValidation",[354,1278,1279],{},"DateKind"," are ",[354,1282,1283],{},"#[non_exhaustive]",[389,1285,1287],{"className":391,"code":1286,"language":393,"meta":394,"style":394},"\u002F\u002F before\nmatch &issue.code {\n    IssueCode::TooSmall { minimum, .. } => println!(\"min {minimum}\"), \u002F\u002F f64\n    IssueCode::Custom { code } if code == \"invalid_length\" => {}\n    _ => {}\n}\n\n\u002F\u002F after\nmatch &issue.code {\n    IssueCode::TooSmall { origin: SizeOrigin::String, minimum, .. } => {\n        println!(\"min {}\", minimum.as_f64().unwrap_or_default()); \u002F\u002F serde_json::Value\n    }\n    IssueCode::InvalidLength { expected, .. } => println!(\"exactly {expected}\"),\n    _ => {} \u002F\u002F required: the enum is non-exhaustive\n}\n\n\u002F\u002F simplest and stable:\nif issue.code.key() == \"too_small\" { \u002F* … *\u002F }\n",[354,1288,1289,1293,1313,1363,1399,1409,1414,1420,1425,1440,1479,1514,1520,1562,1575,1580,1585,1591],{"__ignoreMap":394},[398,1290,1291],{"class":400,"line":401},[398,1292,405],{"class":404},[398,1294,1295,1299,1302,1305,1307,1310],{"class":400,"line":408},[398,1296,1298],{"class":1297},"s7zQu","match",[398,1300,1301],{"class":415}," &",[398,1303,1304],{"class":541},"issue",[398,1306,553],{"class":415},[398,1308,1309],{"class":541},"code ",[398,1311,1312],{"class":415},"{\n",[398,1314,1315,1318,1320,1322,1324,1327,1329,1332,1335,1338,1341,1343,1345,1348,1351,1354,1357,1360],{"class":400,"line":470},[398,1316,1317],{"class":411},"    IssueCode",[398,1319,416],{"class":415},[398,1321,1263],{"class":411},[398,1323,962],{"class":415},[398,1325,1326],{"class":541}," minimum",[398,1328,978],{"class":415},[398,1330,1331],{"class":415}," ..",[398,1333,1334],{"class":415}," }",[398,1336,1337],{"class":415}," =>",[398,1339,1340],{"class":419}," println!",[398,1342,428],{"class":415},[398,1344,453],{"class":415},[398,1346,1347],{"class":449},"min ",[398,1349,1350],{"class":415},"{",[398,1352,1353],{"class":449},"minimum",[398,1355,1356],{"class":415},"}\"",[398,1358,1359],{"class":415},"),",[398,1361,1362],{"class":404}," \u002F\u002F f64\n",[398,1364,1365,1367,1369,1371,1373,1376,1379,1382,1384,1387,1389,1392,1394,1396],{"class":400,"line":476},[398,1366,1317],{"class":411},[398,1368,416],{"class":415},[398,1370,1259],{"class":411},[398,1372,962],{"class":415},[398,1374,1375],{"class":541}," code ",[398,1377,1378],{"class":415},"}",[398,1380,1381],{"class":1297}," if",[398,1383,1375],{"class":541},[398,1385,1386],{"class":415},"==",[398,1388,970],{"class":415},[398,1390,1391],{"class":449},"invalid_length",[398,1393,453],{"class":415},[398,1395,1337],{"class":415},[398,1397,1398],{"class":415}," {}\n",[398,1400,1401,1404,1407],{"class":400,"line":502},[398,1402,1403],{"class":541},"    _ ",[398,1405,1406],{"class":415},"=>",[398,1408,1398],{"class":415},[398,1410,1411],{"class":400,"line":508},[398,1412,1413],{"class":415},"}\n",[398,1415,1416],{"class":400,"line":1209},[398,1417,1419],{"emptyLinePlaceholder":1418},true,"\n",[398,1421,1423],{"class":400,"line":1422},8,[398,1424,473],{"class":404},[398,1426,1428,1430,1432,1434,1436,1438],{"class":400,"line":1427},9,[398,1429,1298],{"class":1297},[398,1431,1301],{"class":415},[398,1433,1304],{"class":541},[398,1435,553],{"class":415},[398,1437,1309],{"class":541},[398,1439,1312],{"class":415},[398,1441,1443,1445,1447,1449,1451,1454,1456,1459,1461,1464,1466,1468,1470,1472,1474,1476],{"class":400,"line":1442},10,[398,1444,1317],{"class":411},[398,1446,416],{"class":415},[398,1448,1263],{"class":411},[398,1450,962],{"class":415},[398,1452,1453],{"class":541}," origin",[398,1455,1217],{"class":415},[398,1457,1458],{"class":411}," SizeOrigin",[398,1460,416],{"class":415},[398,1462,1463],{"class":411},"String",[398,1465,978],{"class":415},[398,1467,1326],{"class":541},[398,1469,978],{"class":415},[398,1471,1331],{"class":415},[398,1473,1334],{"class":415},[398,1475,1337],{"class":415},[398,1477,1478],{"class":415}," {\n",[398,1480,1482,1485,1487,1489,1491,1494,1496,1498,1500,1503,1505,1508,1511],{"class":400,"line":1481},11,[398,1483,1484],{"class":419},"        println!",[398,1486,428],{"class":415},[398,1488,453],{"class":415},[398,1490,1347],{"class":449},[398,1492,1493],{"class":415},"{}\"",[398,1495,978],{"class":415},[398,1497,1326],{"class":541},[398,1499,553],{"class":415},[398,1501,1502],{"class":419},"as_f64",[398,1504,423],{"class":415},[398,1506,1507],{"class":419},"unwrap_or_default",[398,1509,1510],{"class":415},"());",[398,1512,1513],{"class":404}," \u002F\u002F serde_json::Value\n",[398,1515,1517],{"class":400,"line":1516},12,[398,1518,1519],{"class":415},"    }\n",[398,1521,1523,1525,1527,1530,1532,1535,1537,1539,1541,1543,1545,1547,1549,1552,1554,1557,1559],{"class":400,"line":1522},13,[398,1524,1317],{"class":411},[398,1526,416],{"class":415},[398,1528,1529],{"class":411},"InvalidLength",[398,1531,962],{"class":415},[398,1533,1534],{"class":541}," expected",[398,1536,978],{"class":415},[398,1538,1331],{"class":415},[398,1540,1334],{"class":415},[398,1542,1337],{"class":415},[398,1544,1340],{"class":419},[398,1546,428],{"class":415},[398,1548,453],{"class":415},[398,1550,1551],{"class":449},"exactly ",[398,1553,1350],{"class":415},[398,1555,1556],{"class":449},"expected",[398,1558,1356],{"class":415},[398,1560,1561],{"class":415},"),\n",[398,1563,1565,1567,1569,1572],{"class":400,"line":1564},14,[398,1566,1403],{"class":541},[398,1568,1406],{"class":415},[398,1570,1571],{"class":415}," {}",[398,1573,1574],{"class":404}," \u002F\u002F required: the enum is non-exhaustive\n",[398,1576,1578],{"class":400,"line":1577},15,[398,1579,1413],{"class":415},[398,1581,1583],{"class":400,"line":1582},16,[398,1584,1419],{"emptyLinePlaceholder":1418},[398,1586,1588],{"class":400,"line":1587},17,[398,1589,1590],{"class":404},"\u002F\u002F simplest and stable:\n",[398,1592,1594,1597,1600,1602,1604,1606,1609,1612,1615,1617,1620,1622,1624,1627],{"class":400,"line":1593},18,[398,1595,1596],{"class":1297},"if",[398,1598,1599],{"class":541}," issue",[398,1601,553],{"class":415},[398,1603,354],{"class":541},[398,1605,553],{"class":415},[398,1607,1608],{"class":419},"key",[398,1610,1611],{"class":415},"()",[398,1613,1614],{"class":415}," ==",[398,1616,970],{"class":415},[398,1618,1619],{"class":449},"too_small",[398,1621,453],{"class":415},[398,1623,962],{"class":415},[398,1625,1626],{"class":404}," \u002F* … *\u002F",[398,1628,1015],{"class":415},[351,1630,1631,1632,677,1634,677,1637,677,1640,677,1643,677,1646,677,1649,677,1652,677,1655,677,1658,1661,1662,553],{},"New typed variants include ",[354,1633,1529],{},[354,1635,1636],{},"InvalidFormat",[354,1638,1639],{},"InvalidDate",[354,1641,1642],{},"NotMultipleOf",[354,1644,1645],{},"InvalidEnumValue",[354,1647,1648],{},"InvalidUnion",[354,1650,1651],{},"NotUnique",[354,1653,1654],{},"MissingField",[354,1656,1657],{},"FileTypeNotAllowed",[354,1659,1660],{},"SerializeError",". See ",[550,1663,106],{"href":107},[346,1665,1667],{"id":1666},"_4-messages","4. Messages",[559,1669,1670,1673,1684],{},[562,1671,1672],{},"Default messages come from one English template table.",[562,1674,1675,1676,1678,1679,580,1681,553],{},"An absent required key reports ",[354,1677,575],{}," (\"Required field is missing\"); a present ",[354,1680,579],{},[354,1682,1683],{},"invalid_type",[562,1685,1686,1689,1690,1692],{},[354,1687,1688],{},"Display"," no longer appends \", received X\" to ",[354,1691,1683],{}," (the message already says it).",[351,1694,1695,1696,677,1698,677,1701,1704,1705,553],{},"Tests that compare full English messages may need updating. Custom translation tables can add the new keys (",[354,1697,575],{},[354,1699,1700],{},"type.\u003Cname>",[354,1702,1703],{},"too_small.\u003Corigin>",", …); the specific key is tried before the generic one. See ",[550,1706,118],{"href":119},[346,1708,1710],{"id":1709},"_5-json-schema","5. JSON Schema",[351,1712,1713,1714,1717,1718,1721,1722,1724,1725,1727,1728,553],{},"Optional, nullable and nullish fields and unions emit ",[354,1715,1716],{},"anyOf"," instead of ",[354,1719,1720],{},"oneOf",", and ",[354,1723,566],{}," fields are no longer ",[354,1726,571],{},". Update consumers or snapshots that expect ",[354,1729,1720],{},[389,1731,1735],{"className":1732,"code":1733,"language":1734,"meta":394,"style":394},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F before\n{\"oneOf\": [{\"type\": \"string\"}, {\"type\": \"null\"}]}\n\u002F\u002F after\n{\"anyOf\": [{\"type\": \"string\"}, {\"type\": \"null\"}]}\n","json",[354,1736,1737,1741,1793,1797],{"__ignoreMap":394},[398,1738,1739],{"class":400,"line":401},[398,1740,405],{"class":404},[398,1742,1743,1745,1747,1749,1751,1753,1756,1758,1761,1763,1765,1767,1769,1771,1774,1776,1778,1780,1782,1784,1786,1788,1790],{"class":400,"line":408},[398,1744,1350],{"class":415},[398,1746,453],{"class":415},[398,1748,1720],{"class":1117},[398,1750,453],{"class":415},[398,1752,1217],{"class":415},[398,1754,1755],{"class":415}," [{",[398,1757,453],{"class":415},[398,1759,1760],{"class":411},"type",[398,1762,453],{"class":415},[398,1764,1217],{"class":415},[398,1766,970],{"class":415},[398,1768,420],{"class":449},[398,1770,453],{"class":415},[398,1772,1773],{"class":415},"},",[398,1775,962],{"class":415},[398,1777,453],{"class":415},[398,1779,1760],{"class":411},[398,1781,453],{"class":415},[398,1783,1217],{"class":415},[398,1785,970],{"class":415},[398,1787,579],{"class":449},[398,1789,453],{"class":415},[398,1791,1792],{"class":415},"}]}\n",[398,1794,1795],{"class":400,"line":470},[398,1796,473],{"class":404},[398,1798,1799,1801,1803,1805,1807,1809,1811,1813,1815,1817,1819,1821,1823,1825,1827,1829,1831,1833,1835,1837,1839,1841,1843],{"class":400,"line":476},[398,1800,1350],{"class":415},[398,1802,453],{"class":415},[398,1804,1716],{"class":1117},[398,1806,453],{"class":415},[398,1808,1217],{"class":415},[398,1810,1755],{"class":415},[398,1812,453],{"class":415},[398,1814,1760],{"class":411},[398,1816,453],{"class":415},[398,1818,1217],{"class":415},[398,1820,970],{"class":415},[398,1822,420],{"class":449},[398,1824,453],{"class":415},[398,1826,1773],{"class":415},[398,1828,962],{"class":415},[398,1830,453],{"class":415},[398,1832,1760],{"class":411},[398,1834,453],{"class":415},[398,1836,1217],{"class":415},[398,1838,970],{"class":415},[398,1840,579],{"class":449},[398,1842,453],{"class":415},[398,1844,1792],{"class":415},[351,1846,1847,1848,1851,1852,1855,1856,1859,1860,1863],{},"The inherent ",[354,1849,1850],{},"to_json_schema()"," methods on individual schema types are gone; use the ",[354,1853,1854],{},"JsonSchema"," trait (",[354,1857,1858],{},"json_schema()","). ",[354,1861,1862],{},"ZObject::to_json_schema()"," stays.",[346,1865,1867],{"id":1866},"_6-module-paths","6. Module paths",[351,1869,1870,1871,677,1874,677,1877,677,1880,929,1883,1886,1887,677,1890,677,1893,677,1896,929,1899,1902],{},"The core was split into ",[354,1872,1873],{},"schema\u002F",[354,1875,1876],{},"error\u002F",[354,1878,1879],{},"object\u002F",[354,1881,1882],{},"macros\u002F",[354,1884,1885],{},"openapi\u002F",". The old paths ",[354,1888,1889],{},"vld::json_schema",[354,1891,1892],{},"vld::diff",[354,1894,1895],{},"vld::format",[354,1897,1898],{},"vld::i18n",[354,1900,1901],{},"vld::input"," remain as aliases, so imports keep compiling.",[346,1904,1906],{"id":1905},"_7-schema-caching","7. Schema caching",[351,1908,1909,677,1912,677,1915,929,1918,1920,1921,1924,1925,553],{},[354,1910,1911],{},"schema!",[354,1913,1914],{},"impl_validate_fields!",[354,1916,1917],{},"impl_rules!",[354,1919,84],{}," build field schemas once per process. Field schemas must be ",[354,1922,1923],{},"Send + Sync + 'static",", and values captured from runtime configuration are frozen at first use. See ",[550,1926,320],{"href":321},[351,1928,1929,1932,1933,1936,1937,461],{},[354,1930,1931],{},"VldInput::to_json_value"," now returns ",[354,1934,1935],{},"Cow\u003CValue>"," (only relevant if you implemented ",[354,1938,1939],{},"VldInput",[346,1941,1943],{"id":1942},"_8-derive","8. derive",[351,1945,1946,361,1949,1952,1953,1956,1957,929,1960,1963],{},[354,1947,1948],{},"validate_fields()",[354,1950,1951],{},"parse_lenient()"," are generated only with ",[354,1954,1955],{},"#[vld(lenient)]",". ",[354,1958,1959],{},"#[serde(flatten)]",[354,1961,1962],{},"#[serde(alias)]"," are compile errors instead of being ignored.",[389,1965,1967],{"className":391,"code":1966,"language":393,"meta":394,"style":394},"\u002F\u002F after\n#[derive(Debug, Default, serde::Serialize, vld::Validate)]\n#[vld(lenient)]\nstruct Config { \u002F* … *\u002F }\n",[354,1968,1969,1973,2012,2025],{"__ignoreMap":394},[398,1970,1971],{"class":400,"line":401},[398,1972,473],{"class":404},[398,1974,1975,1978,1980,1982,1985,1987,1990,1992,1995,1997,2000,2002,2004,2006,2009],{"class":400,"line":408},[398,1976,1977],{"class":415},"#[",[398,1979,1007],{"class":541},[398,1981,428],{"class":415},[398,1983,1984],{"class":411},"Debug",[398,1986,978],{"class":415},[398,1988,1989],{"class":411}," Default",[398,1991,978],{"class":415},[398,1993,1994],{"class":541}," serde",[398,1996,416],{"class":415},[398,1998,1999],{"class":411},"Serialize",[398,2001,978],{"class":415},[398,2003,1126],{"class":541},[398,2005,416],{"class":415},[398,2007,2008],{"class":411},"Validate",[398,2010,2011],{"class":415},")]\n",[398,2013,2014,2016,2018,2020,2023],{"class":400,"line":470},[398,2015,1977],{"class":415},[398,2017,412],{"class":541},[398,2019,428],{"class":415},[398,2021,2022],{"class":541},"lenient",[398,2024,2011],{"class":415},[398,2026,2027,2030,2033,2035,2037],{"class":400,"line":476},[398,2028,2029],{"class":1117},"struct",[398,2031,2032],{"class":411}," Config",[398,2034,962],{"class":415},[398,2036,1626],{"class":404},[398,2038,1015],{"class":415},[346,2040,2042],{"id":2041},"_9-web-adapters","9. Web adapters",[559,2044,2045,2066,2073,2079],{},[562,2046,2047,2050,2051,2054,2055,2058,2059,2062,2063,553],{},[354,2048,2049],{},"VldJson"," answers ",[569,2052,2053],{},"415"," unless the content type is ",[354,2056,2057],{},"application\u002Fjson"," or ",[354,2060,2061],{},"application\u002F*+json",". Clients must send ",[354,2064,2065],{},"Content-Type: application\u002Fjson",[562,2067,2068,2069,2072],{},"Malformed JSON is ",[569,2070,2071],{},"422"," with the validation body (was 400).",[562,2074,2075,2076,2078],{},"Each issue in the 422 body has a ",[354,2077,354],{}," field.",[562,2080,2081,2082,2085,2086,2089,2090,461],{},"Query, path, form, header and cookie values fall back to their original text when the schema wants a string (",[354,2083,2084],{},"?q=123"," into ",[354,2087,2088],{},"vld::string()"," is ",[354,2091,2092],{},"\"123\"",[351,2094,617,2095,553],{},[550,2096,2097],{"href":149},"web overview",[346,2099,2101],{"id":2100},"_10-crate-specific-changes","10. Crate-specific changes",[621,2103,2104,2117],{},[654,2105,2106],{},[657,2107,2108,2111,2114],{},[660,2109,2110],{},"Crate",[660,2112,2113],{},"Change",[660,2115,2116],{},"What to do",[666,2118,2119,2149,2164,2183,2208,2234],{},[657,2120,2121,2127,2144],{},[671,2122,2123,677,2125],{},[354,2124,180],{},[354,2126,168],{},[671,2128,2129,2131,2132,2135,2136,2139,2140,2143],{},[354,2130,813],{}," returns ",[354,2133,2134],{},"Option\u003CT>","; ",[354,2137,2138],{},"try_validated"," is deprecated; the tower inner service receives ",[354,2141,2142],{},"Request\u003CValidatedBody\u003CB>>"," and non-JSON bodies are no longer buffered",[671,2145,2146,2147],{},"handle ",[354,2148,583],{},[657,2150,2151,2155,2161],{},[671,2152,2153],{},[354,2154,184],{},[671,2156,2157,2160],{},[354,2158,2159],{},"handle_rejection"," maps rejections to their real status (unknown → 500, was 404); bodies are streamed with a limit (413)",[671,2162,2163],{},"check status-code tests",[657,2165,2166,2170,2177],{},[671,2167,2168],{},[354,2169,160],{},[671,2171,2172,2173,2176],{},"ntex ",[569,2174,2175],{},"4"," is the default; crate MSRV 1.97",[671,2178,2179,2180],{},"ntex 3: ",[354,2181,2182],{},"vld-ntex = { version = \"0.5\", default-features = false, features = [\"ntex-3\"] }",[657,2184,2185,2189,2203],{},[671,2186,2187],{},[354,2188,216],{},[671,2190,2191,2194,2195,2198,2199,2202],{},[354,2192,2193],{},"with_default"," emits ",[354,2196,2197],{},"x.nullish().transform((v) => v ?? d)"," (Zod) \u002F ",[354,2200,2201],{},"v.nullish(x, d)"," (Valibot)",[671,2204,2205,2206],{},"regenerate client schemas; defaults accept ",[354,2207,579],{},[657,2209,2210,2214,2224],{},[671,2211,2212],{},[354,2213,270],{},[671,2215,2216,2219,2220,2223],{},[354,2217,2218],{},"validate_or_exit"," requires ",[354,2221,2222],{},"clap::CommandFactory"," and reports clap's argument names; clap 4",[671,2225,2226,2227,2230,2231],{},"derive ",[354,2228,2229],{},"clap::Parser",", or call ",[354,2232,2233],{},"validate_cli",[657,2235,2236,2246,2256],{},[671,2237,2238,677,2240,677,2242,677,2244],{},[354,2239,288],{},[354,2241,284],{},[354,2243,280],{},[354,2245,242],{},[671,2247,2248,2249,677,2252,2255],{},"issue paths have no leading dot (",[354,2250,2251],{},"user.email",[354,2253,2254],{},"items[0]",")",[671,2257,2258],{},"update path comparisons",[389,2260,2262],{"className":391,"code":2261,"language":393,"meta":394,"style":394},"\u002F\u002F vld-tower \u002F vld-rama, before: returned T and panicked when missing\nlet body: CreateUser = vld_tower::validated(&req);\n\u002F\u002F after: None when the layer did not run or the request was not JSON\nlet Some(body) = vld_tower::validated::\u003CCreateUser>(&req) else {\n    return bad_request();\n};\n",[354,2263,2264,2269,2300,2305,2345,2355],{"__ignoreMap":394},[398,2265,2266],{"class":400,"line":401},[398,2267,2268],{"class":404},"\u002F\u002F vld-tower \u002F vld-rama, before: returned T and panicked when missing\n",[398,2270,2271,2273,2276,2278,2281,2283,2286,2288,2291,2294,2297],{"class":400,"line":408},[398,2272,1118],{"class":1117},[398,2274,2275],{"class":541}," body",[398,2277,1217],{"class":415},[398,2279,2280],{"class":411}," CreateUser",[398,2282,1230],{"class":415},[398,2284,2285],{"class":411}," vld_tower",[398,2287,416],{"class":415},[398,2289,2290],{"class":419},"validated",[398,2292,2293],{"class":415},"(&",[398,2295,2296],{"class":541},"req",[398,2298,2299],{"class":415},");\n",[398,2301,2302],{"class":400,"line":470},[398,2303,2304],{"class":404},"\u002F\u002F after: None when the layer did not run or the request was not JSON\n",[398,2306,2307,2309,2312,2314,2317,2319,2321,2323,2325,2327,2330,2333,2336,2338,2340,2343],{"class":400,"line":476},[398,2308,1118],{"class":1117},[398,2310,2311],{"class":411}," Some",[398,2313,428],{"class":415},[398,2315,2316],{"class":541},"body",[398,2318,2255],{"class":415},[398,2320,1230],{"class":415},[398,2322,2285],{"class":411},[398,2324,416],{"class":415},[398,2326,2290],{"class":419},[398,2328,2329],{"class":415},"::\u003C",[398,2331,2332],{"class":411},"CreateUser",[398,2334,2335],{"class":415},">(&",[398,2337,2296],{"class":541},[398,2339,2255],{"class":415},[398,2341,2342],{"class":1297}," else",[398,2344,1478],{"class":415},[398,2346,2347,2350,2353],{"class":400,"line":502},[398,2348,2349],{"class":1297},"    return",[398,2351,2352],{"class":419}," bad_request",[398,2354,1134],{"class":415},[398,2356,2357],{"class":400,"line":508},[398,2358,2359],{"class":415},"};\n",[346,2361,2363],{"id":2362},"_11-msrv","11. MSRV",[351,2365,2366,2367,553],{},"The core and most crates need Rust 1.85. Some integration features need more; see ",[550,2368,23],{"href":24},[2370,2371,2372],"style",{},"html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}",{"title":394,"searchDepth":408,"depth":470,"links":2374},[2375,2382],{"id":343,"depth":408,"text":344,"children":2376},[2377,2378,2379,2380,2381],{"id":348,"depth":470,"text":349},{"id":556,"depth":470,"text":557},{"id":624,"depth":470,"text":625},{"id":649,"depth":470,"text":650},{"id":887,"depth":470,"text":888},{"id":908,"depth":408,"text":909,"children":2383},[2384,2385,2386,2387,2388,2389,2390,2391,2392,2393,2394],{"id":918,"depth":470,"text":919},{"id":1060,"depth":470,"text":1061},{"id":1248,"depth":470,"text":1249},{"id":1666,"depth":470,"text":1667},{"id":1709,"depth":470,"text":1710},{"id":1866,"depth":470,"text":1867},{"id":1905,"depth":470,"text":1906},{"id":1942,"depth":470,"text":1943},{"id":2041,"depth":470,"text":2042},{"id":2100,"depth":470,"text":2101},{"id":2362,"depth":470,"text":2363},"Every breaking change in vld 0.6 and 0.5, with before\u002Fafter code.","md",null,{},{"title":312,"description":2395},"5pFsUP4q0nQzG1Vzp8ZsOS_a0c0PNfMHG1F4_aOQNSY",[2402,2404],{"title":302,"path":303,"stem":304,"description":2403,"children":-1},"Internal building blocks shared by the database, UI and CLI integration crates.",{"title":316,"path":317,"stem":318,"description":2405,"children":-1},"Validating untrusted input safely — filesystem paths, URLs, body limits, headers, cookies and error output.",1794036356984]