[{"data":1,"prerenderedAt":2258},["ShallowReactive",2],{"navigation":3,"\u002Fstructs\u002Fderive":335,"\u002Fstructs\u002Fderive-surround":2253},[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":84,"body":337,"description":2247,"extension":2248,"links":2249,"meta":2250,"navigation":483,"path":85,"seo":2251,"stem":86,"__hash__":2252},"docs\u002F3.structs\u002F2.derive.md",{"type":338,"value":339,"toc":2238},"minimark",[340,373,437,790,801,806,927,931,1111,1128,1132,1135,1528,1623,1626,1702,1752,1770,1774,1777,1904,1907,1927,2187,2191,2217,2221,2234],[341,342,343,344,348,349,351,352,355,356,361,362,365,366,365,369,372],"p",{},"With the ",[345,346,347],"code",{},"derive"," feature, ",[345,350,84],{}," generates the same API as ",[345,353,354],{},"schema!"," from attributes on an ordinary struct or ",[357,358,360],"a",{"href":359},"#enums","enum",". Use it when the struct already has other derives (",[345,363,364],{},"serde",", ",[345,367,368],{},"clap",[345,370,371],{},"utoipa",") or you prefer attributes.",[374,375,381],"pre",{"className":376,"code":377,"filename":378,"language":379,"meta":380,"style":380},"language-toml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","vld = { version = \"0.5\", features = [\"derive\"] }\n","Cargo.toml","toml","",[345,382,383],{"__ignoreMap":380},[384,385,388,392,396,399,402,404,407,411,414,417,420,422,425,427,429,431,434],"span",{"class":386,"line":387},"line",1,[384,389,391],{"class":390},"sTEyZ","vld ",[384,393,395],{"class":394},"sMK4o","=",[384,397,398],{"class":394}," {",[384,400,401],{"class":390}," version ",[384,403,395],{"class":394},[384,405,406],{"class":394}," \"",[384,408,410],{"class":409},"sfazB","0.5",[384,412,413],{"class":394},"\"",[384,415,416],{"class":394},",",[384,418,419],{"class":390}," features ",[384,421,395],{"class":394},[384,423,424],{"class":394}," [",[384,426,413],{"class":394},[384,428,347],{"class":409},[384,430,413],{"class":394},[384,432,433],{"class":394},"]",[384,435,436],{"class":394}," }\n",[374,438,442],{"className":439,"code":440,"language":441,"meta":380,"style":380},"language-rust shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","use vld::prelude::*;\nuse vld::Validate;\n\n#[derive(Debug, serde::Serialize, serde::Deserialize, Validate)]\n#[serde(rename_all = \"camelCase\")]\nstruct SignUp {\n    #[vld(vld::string().min(2).max(50))]\n    display_name: String,\n    #[vld(vld::string().email())]\n    email_address: String,\n    #[vld(vld::number().int().gte(18).optional())]\n    age: Option\u003Ci64>,\n}\n\nlet s = SignUp::vld_parse(r#\"{\"displayName\": \"Ada\", \"emailAddress\": \"ada@example.com\"}\"#).unwrap();\nassert_eq!(s.age, None);\n","rust",[345,443,444,463,478,485,526,549,562,605,620,643,655,693,713,719,724,765],{"__ignoreMap":380},[384,445,446,450,454,457,460],{"class":386,"line":387},[384,447,449],{"class":448},"sbssI","use",[384,451,453],{"class":452},"sBMFI"," vld",[384,455,456],{"class":394},"::",[384,458,459],{"class":452},"prelude",[384,461,462],{"class":394},"::*;\n",[384,464,466,468,470,472,475],{"class":386,"line":465},2,[384,467,449],{"class":448},[384,469,453],{"class":452},[384,471,456],{"class":394},[384,473,474],{"class":452},"Validate",[384,476,477],{"class":394},";\n",[384,479,481],{"class":386,"line":480},3,[384,482,484],{"emptyLinePlaceholder":483},true,"\n",[384,486,488,491,493,496,499,501,504,506,509,511,513,515,518,520,523],{"class":386,"line":487},4,[384,489,490],{"class":394},"#[",[384,492,347],{"class":390},[384,494,495],{"class":394},"(",[384,497,498],{"class":452},"Debug",[384,500,416],{"class":394},[384,502,503],{"class":390}," serde",[384,505,456],{"class":394},[384,507,508],{"class":452},"Serialize",[384,510,416],{"class":394},[384,512,503],{"class":390},[384,514,456],{"class":394},[384,516,517],{"class":452},"Deserialize",[384,519,416],{"class":394},[384,521,522],{"class":452}," Validate",[384,524,525],{"class":394},")]\n",[384,527,529,531,533,535,538,540,542,545,547],{"class":386,"line":528},5,[384,530,490],{"class":394},[384,532,364],{"class":390},[384,534,495],{"class":394},[384,536,537],{"class":390},"rename_all ",[384,539,395],{"class":394},[384,541,406],{"class":394},[384,543,544],{"class":409},"camelCase",[384,546,413],{"class":394},[384,548,525],{"class":394},[384,550,552,556,559],{"class":386,"line":551},6,[384,553,555],{"class":554},"spNyl","struct",[384,557,558],{"class":452}," SignUp",[384,560,561],{"class":394}," {\n",[384,563,565,568,571,573,575,577,580,583,586,588,591,594,597,599,602],{"class":386,"line":564},7,[384,566,567],{"class":394},"    #[",[384,569,570],{"class":390},"vld",[384,572,495],{"class":394},[384,574,570],{"class":390},[384,576,456],{"class":394},[384,578,579],{"class":390},"string",[384,581,582],{"class":394},"().",[384,584,585],{"class":390},"min",[384,587,495],{"class":394},[384,589,590],{"class":390},"2",[384,592,593],{"class":394},").",[384,595,596],{"class":390},"max",[384,598,495],{"class":394},[384,600,601],{"class":390},"50",[384,603,604],{"class":394},"))]\n",[384,606,608,611,614,617],{"class":386,"line":607},8,[384,609,610],{"class":390},"    display_name",[384,612,613],{"class":394},":",[384,615,616],{"class":452}," String",[384,618,619],{"class":394},",\n",[384,621,623,625,627,629,631,633,635,637,640],{"class":386,"line":622},9,[384,624,567],{"class":394},[384,626,570],{"class":390},[384,628,495],{"class":394},[384,630,570],{"class":390},[384,632,456],{"class":394},[384,634,579],{"class":390},[384,636,582],{"class":394},[384,638,639],{"class":390},"email",[384,641,642],{"class":394},"())]\n",[384,644,646,649,651,653],{"class":386,"line":645},10,[384,647,648],{"class":390},"    email_address",[384,650,613],{"class":394},[384,652,616],{"class":452},[384,654,619],{"class":394},[384,656,658,660,662,664,666,668,671,673,676,678,681,683,686,688,691],{"class":386,"line":657},11,[384,659,567],{"class":394},[384,661,570],{"class":390},[384,663,495],{"class":394},[384,665,570],{"class":390},[384,667,456],{"class":394},[384,669,670],{"class":390},"number",[384,672,582],{"class":394},[384,674,675],{"class":390},"int",[384,677,582],{"class":394},[384,679,680],{"class":390},"gte",[384,682,495],{"class":394},[384,684,685],{"class":390},"18",[384,687,593],{"class":394},[384,689,690],{"class":390},"optional",[384,692,642],{"class":394},[384,694,696,699,701,704,707,710],{"class":386,"line":695},12,[384,697,698],{"class":390},"    age",[384,700,613],{"class":394},[384,702,703],{"class":452}," Option",[384,705,706],{"class":394},"\u003C",[384,708,709],{"class":452},"i64",[384,711,712],{"class":394},">,\n",[384,714,716],{"class":386,"line":715},13,[384,717,718],{"class":394},"}\n",[384,720,722],{"class":386,"line":721},14,[384,723,484],{"emptyLinePlaceholder":483},[384,725,727,730,733,735,737,739,743,745,748,751,754,757,759,762],{"class":386,"line":726},15,[384,728,729],{"class":554},"let",[384,731,732],{"class":390}," s ",[384,734,395],{"class":394},[384,736,558],{"class":452},[384,738,456],{"class":394},[384,740,742],{"class":741},"s2Zo4","vld_parse",[384,744,495],{"class":394},[384,746,747],{"class":409},"r",[384,749,750],{"class":394},"#\"",[384,752,753],{"class":409},"{\"displayName\": \"Ada\", \"emailAddress\": \"ada@example.com\"}",[384,755,756],{"class":394},"\"#",[384,758,593],{"class":394},[384,760,761],{"class":741},"unwrap",[384,763,764],{"class":394},"();\n",[384,766,768,771,773,776,779,782,784,787],{"class":386,"line":767},16,[384,769,770],{"class":741},"assert_eq!",[384,772,495],{"class":394},[384,774,775],{"class":390},"s",[384,777,778],{"class":394},".",[384,780,781],{"class":390},"age",[384,783,416],{"class":394},[384,785,786],{"class":452}," None",[384,788,789],{"class":394},");\n",[341,791,792,793,796,797,800],{},"Every field needs a ",[345,794,795],{},"#[vld(...)]"," attribute with a schema expression (except ",[345,798,799],{},"#[serde(skip)]"," fields). The expression is pasted as is, so the paths must be in scope.",[802,803,805],"h2",{"id":804},"generated-api","Generated API",[807,808,809,822],"table",{},[810,811,812],"thead",{},[813,814,815,819],"tr",{},[816,817,818],"th",{},"Item",[816,820,821],{},"Notes",[823,824,825,847,864,874,890,906],"tbody",{},[813,826,827,833],{},[828,829,830],"td",{},[345,831,832],{},"T::vld_parse(input)",[828,834,835,836,838,839,842,843,846],{},"named ",[345,837,742],{},", not ",[345,840,841],{},"parse",", so it does not clash with ",[345,844,845],{},"clap::Parser::parse"," and similar derives",[813,848,849,858],{},[828,850,851,854,855],{},[345,852,853],{},"T::parse_value(&value)"," \u002F ",[345,856,857],{},"T::vld_parse_value(&value)",[828,859,860,861],{},"parse a ",[345,862,863],{},"serde_json::Value",[813,865,866,871],{},[828,867,868],{},[345,869,870],{},"impl VldParse for T",[828,872,873],{},"used by all integration crates",[813,875,876,884],{},[828,877,878,854,881],{},[345,879,880],{},"T::validate(&instance)",[345,882,883],{},"T::is_valid(&instance)",[828,885,886,887,889],{},"check a ",[345,888,508],{}," value",[813,891,892,900],{},[828,893,894,854,897],{},[345,895,896],{},"T::json_schema()",[345,898,899],{},"T::to_openapi_document()",[828,901,902,903],{},"feature ",[345,904,905],{},"openapi",[813,907,908,921],{},[828,909,910,854,913,916,917,920],{},[345,911,912],{},"T::validate_fields(..)",[345,914,915],{},"T::parse_lenient(..)"," (+ ",[345,918,919],{},"_value"," variants)",[828,922,923,924],{},"only with ",[345,925,926],{},"#[vld(lenient)]",[802,928,930],{"id":929},"serde-attributes","Serde attributes",[807,932,933,943],{},[810,934,935],{},[813,936,937,940],{},[816,938,939],{},"Attribute",[816,941,942],{},"Effect",[823,944,945,982,996,1012,1033,1075,1101],{},[813,946,947,953],{},[828,948,949,950],{},"struct ",[345,951,952],{},"rename_all = \"...\"",[828,954,955,365,958,365,961,365,963,365,966,365,969,365,972,365,975,978,979],{},[345,956,957],{},"lowercase",[345,959,960],{},"UPPERCASE",[345,962,544],{},[345,964,965],{},"PascalCase",[345,967,968],{},"snake_case",[345,970,971],{},"SCREAMING_SNAKE_CASE",[345,973,974],{},"kebab-case",[345,976,977],{},"SCREAMING-KEBAB-CASE","; also ",[345,980,981],{},"rename_all(serialize = \"...\", deserialize = \"...\")",[813,983,984,990],{},[828,985,986,987],{},"field ",[345,988,989],{},"rename = \"...\"",[828,991,992,993],{},"also ",[345,994,995],{},"rename(serialize = \"...\", deserialize = \"...\")",[813,997,998,1006],{},[828,999,986,1000,854,1003],{},[345,1001,1002],{},"skip",[345,1004,1005],{},"skip_deserializing",[828,1007,1008,1009],{},"not validated, set to ",[345,1010,1011],{},"Default::default()",[813,1013,1014,1025],{},[828,1015,986,1016,854,1019,1022,1023],{},[345,1017,1018],{},"default",[345,1020,1021],{},"default = \"path\"",", struct ",[345,1024,1018],{},[828,1026,1027,1028,1032],{},"a ",[1029,1030,1031],"strong",{},"missing"," key takes the default without running the schema (as serde does); a present key is validated",[813,1034,1035,1040],{},[828,1036,986,1037],{},[345,1038,1039],{},"flatten",[828,1041,1042,1043,1046,1047,1049,1050,838,1053,1056,1057,1059,1060,1063,1064,1067,1068,1070,1071,1074],{},"the field is parsed from the same object (",[345,1044,1045],{},"\u003CT>::parse_value",", or the field's ",[345,1048,795],{}," schema); errors keep the inner paths (",[345,1051,1052],{},".author",[345,1054,1055],{},".meta.author","); a derived \u002F ",[345,1058,354],{}," type's properties and ",[345,1061,1062],{},"required"," are merged into the JSON Schema (an opaque schema goes into ",[345,1065,1066],{},"allOf","). Not with ",[345,1069,926],{},"; ",[345,1072,1073],{},"validate()"," checks the flattened part under its deserialize names",[813,1076,1077,1083],{},[828,1078,1079,1080],{},"struct \u002F enum ",[345,1081,1082],{},"deny_unknown_fields",[828,1084,1085,1086,1089,1090,1093,1094,1097,1098,1100],{},"a key that is not a field (under the deserialize names; the tag and ",[345,1087,1088],{},"content"," keys of a tagged enum are allowed) fails with ",[345,1091,1092],{},"unrecognized_field"," at its path; the JSON Schema gets ",[345,1095,1096],{},"additionalProperties: false",". Not with ",[345,1099,1039],{}," (serde rejects that combination too)",[813,1102,1103,1108],{},[828,1104,1105],{},[345,1106,1107],{},"alias",[828,1109,1110],{},"compile error (not supported)",[341,1112,1113,1114,1117,1118,1120,1121,1124,1125,778],{},"Parsing and JSON Schema use the ",[1029,1115,1116],{},"deserialize"," names; ",[345,1119,1073],{}," uses the ",[1029,1122,1123],{},"serialize"," names. See ",[357,1126,1127],{"href":89},"parse vs validate",[802,1129,1131],{"id":1130},"enums","Enums",[341,1133,1134],{},"Enums follow serde's representations, so the same type deserializes and validates the same JSON. The output is the enum itself.",[374,1136,1138],{"className":439,"code":1137,"language":441,"meta":380,"style":380},"#[derive(Debug, serde::Serialize, serde::Deserialize, Validate)]\n#[serde(tag = \"type\", rename_all = \"snake_case\")]\nenum Action {\n    Ping,\n    CreateUser {\n        #[vld(vld::string().min(2))]\n        name: String,\n        #[vld(vld::string().email())]\n        email: String,\n    },\n    Move(Point),                       \u002F\u002F a derived \u002F schema! type validates itself\n    #[serde(rename = \"delete\", alias = \"remove\")]\n    DeleteUser {\n        #[vld(vld::number().int().min(1))]\n        id: i64,\n    },\n}\n\nlet a = Action::vld_parse(r#\"{\"type\": \"create_user\", \"name\": \"Ada\", \"email\": \"ada@example.com\"}\"#)?;\nlet err = Action::vld_parse(r#\"{\"type\": \"fly\"}\"#).unwrap_err();\nassert_eq!(err.issues[0].code.key(), \"invalid_discriminator\"); \u002F\u002F at `.type`\n",[345,1139,1140,1172,1207,1216,1223,1230,1255,1266,1286,1297,1302,1319,1355,1362,1391,1403,1407,1412,1417,1447,1481],{"__ignoreMap":380},[384,1141,1142,1144,1146,1148,1150,1152,1154,1156,1158,1160,1162,1164,1166,1168,1170],{"class":386,"line":387},[384,1143,490],{"class":394},[384,1145,347],{"class":390},[384,1147,495],{"class":394},[384,1149,498],{"class":452},[384,1151,416],{"class":394},[384,1153,503],{"class":390},[384,1155,456],{"class":394},[384,1157,508],{"class":452},[384,1159,416],{"class":394},[384,1161,503],{"class":390},[384,1163,456],{"class":394},[384,1165,517],{"class":452},[384,1167,416],{"class":394},[384,1169,522],{"class":452},[384,1171,525],{"class":394},[384,1173,1174,1176,1178,1180,1183,1185,1187,1190,1192,1194,1197,1199,1201,1203,1205],{"class":386,"line":465},[384,1175,490],{"class":394},[384,1177,364],{"class":390},[384,1179,495],{"class":394},[384,1181,1182],{"class":390},"tag ",[384,1184,395],{"class":394},[384,1186,406],{"class":394},[384,1188,1189],{"class":409},"type",[384,1191,413],{"class":394},[384,1193,416],{"class":394},[384,1195,1196],{"class":390}," rename_all ",[384,1198,395],{"class":394},[384,1200,406],{"class":394},[384,1202,968],{"class":409},[384,1204,413],{"class":394},[384,1206,525],{"class":394},[384,1208,1209,1211,1214],{"class":386,"line":480},[384,1210,360],{"class":554},[384,1212,1213],{"class":452}," Action",[384,1215,561],{"class":394},[384,1217,1218,1221],{"class":386,"line":487},[384,1219,1220],{"class":452},"    Ping",[384,1222,619],{"class":394},[384,1224,1225,1228],{"class":386,"line":528},[384,1226,1227],{"class":452},"    CreateUser",[384,1229,561],{"class":394},[384,1231,1232,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253],{"class":386,"line":551},[384,1233,1234],{"class":394},"        #[",[384,1236,570],{"class":390},[384,1238,495],{"class":394},[384,1240,570],{"class":390},[384,1242,456],{"class":394},[384,1244,579],{"class":390},[384,1246,582],{"class":394},[384,1248,585],{"class":390},[384,1250,495],{"class":394},[384,1252,590],{"class":390},[384,1254,604],{"class":394},[384,1256,1257,1260,1262,1264],{"class":386,"line":564},[384,1258,1259],{"class":390},"        name",[384,1261,613],{"class":394},[384,1263,616],{"class":452},[384,1265,619],{"class":394},[384,1267,1268,1270,1272,1274,1276,1278,1280,1282,1284],{"class":386,"line":607},[384,1269,1234],{"class":394},[384,1271,570],{"class":390},[384,1273,495],{"class":394},[384,1275,570],{"class":390},[384,1277,456],{"class":394},[384,1279,579],{"class":390},[384,1281,582],{"class":394},[384,1283,639],{"class":390},[384,1285,642],{"class":394},[384,1287,1288,1291,1293,1295],{"class":386,"line":622},[384,1289,1290],{"class":390},"        email",[384,1292,613],{"class":394},[384,1294,616],{"class":452},[384,1296,619],{"class":394},[384,1298,1299],{"class":386,"line":645},[384,1300,1301],{"class":394},"    },\n",[384,1303,1304,1307,1309,1312,1315],{"class":386,"line":657},[384,1305,1306],{"class":741},"    Move",[384,1308,495],{"class":394},[384,1310,1311],{"class":452},"Point",[384,1313,1314],{"class":394},"),",[384,1316,1318],{"class":1317},"sHwdD","                       \u002F\u002F a derived \u002F schema! type validates itself\n",[384,1320,1321,1323,1325,1327,1330,1332,1334,1337,1339,1341,1344,1346,1348,1351,1353],{"class":386,"line":695},[384,1322,567],{"class":394},[384,1324,364],{"class":390},[384,1326,495],{"class":394},[384,1328,1329],{"class":390},"rename ",[384,1331,395],{"class":394},[384,1333,406],{"class":394},[384,1335,1336],{"class":409},"delete",[384,1338,413],{"class":394},[384,1340,416],{"class":394},[384,1342,1343],{"class":390}," alias ",[384,1345,395],{"class":394},[384,1347,406],{"class":394},[384,1349,1350],{"class":409},"remove",[384,1352,413],{"class":394},[384,1354,525],{"class":394},[384,1356,1357,1360],{"class":386,"line":715},[384,1358,1359],{"class":452},"    DeleteUser",[384,1361,561],{"class":394},[384,1363,1364,1366,1368,1370,1372,1374,1376,1378,1380,1382,1384,1386,1389],{"class":386,"line":721},[384,1365,1234],{"class":394},[384,1367,570],{"class":390},[384,1369,495],{"class":394},[384,1371,570],{"class":390},[384,1373,456],{"class":394},[384,1375,670],{"class":390},[384,1377,582],{"class":394},[384,1379,675],{"class":390},[384,1381,582],{"class":394},[384,1383,585],{"class":390},[384,1385,495],{"class":394},[384,1387,1388],{"class":390},"1",[384,1390,604],{"class":394},[384,1392,1393,1396,1398,1401],{"class":386,"line":726},[384,1394,1395],{"class":390},"        id",[384,1397,613],{"class":394},[384,1399,1400],{"class":452}," i64",[384,1402,619],{"class":394},[384,1404,1405],{"class":386,"line":767},[384,1406,1301],{"class":394},[384,1408,1410],{"class":386,"line":1409},17,[384,1411,718],{"class":394},[384,1413,1415],{"class":386,"line":1414},18,[384,1416,484],{"emptyLinePlaceholder":483},[384,1418,1420,1422,1425,1427,1429,1431,1433,1435,1437,1439,1442,1444],{"class":386,"line":1419},19,[384,1421,729],{"class":554},[384,1423,1424],{"class":390}," a ",[384,1426,395],{"class":394},[384,1428,1213],{"class":452},[384,1430,456],{"class":394},[384,1432,742],{"class":741},[384,1434,495],{"class":394},[384,1436,747],{"class":409},[384,1438,750],{"class":394},[384,1440,1441],{"class":409},"{\"type\": \"create_user\", \"name\": \"Ada\", \"email\": \"ada@example.com\"}",[384,1443,756],{"class":394},[384,1445,1446],{"class":394},")?;\n",[384,1448,1450,1452,1455,1457,1459,1461,1463,1465,1467,1469,1472,1474,1476,1479],{"class":386,"line":1449},20,[384,1451,729],{"class":554},[384,1453,1454],{"class":390}," err ",[384,1456,395],{"class":394},[384,1458,1213],{"class":452},[384,1460,456],{"class":394},[384,1462,742],{"class":741},[384,1464,495],{"class":394},[384,1466,747],{"class":409},[384,1468,750],{"class":394},[384,1470,1471],{"class":409},"{\"type\": \"fly\"}",[384,1473,756],{"class":394},[384,1475,593],{"class":394},[384,1477,1478],{"class":741},"unwrap_err",[384,1480,764],{"class":394},[384,1482,1484,1486,1488,1491,1493,1496,1499,1502,1505,1507,1509,1512,1515,1517,1520,1522,1525],{"class":386,"line":1483},21,[384,1485,770],{"class":741},[384,1487,495],{"class":394},[384,1489,1490],{"class":390},"err",[384,1492,778],{"class":394},[384,1494,1495],{"class":390},"issues",[384,1497,1498],{"class":394},"[",[384,1500,1501],{"class":448},"0",[384,1503,1504],{"class":394},"].",[384,1506,345],{"class":390},[384,1508,778],{"class":394},[384,1510,1511],{"class":741},"key",[384,1513,1514],{"class":394},"(),",[384,1516,406],{"class":394},[384,1518,1519],{"class":409},"invalid_discriminator",[384,1521,413],{"class":394},[384,1523,1524],{"class":394},");",[384,1526,1527],{"class":1317}," \u002F\u002F at `.type`\n",[807,1529,1530,1543],{},[810,1531,1532],{},[813,1533,1534,1537,1540],{},[816,1535,1536],{},"Representation",[816,1538,1539],{},"Input",[816,1541,1542],{},"Errors at",[823,1544,1545,1563,1583,1603],{},[813,1546,1547,1550,1558],{},[828,1548,1549],{},"external (default)",[828,1551,1552,365,1555],{},[345,1553,1554],{},"\"Ping\"",[345,1556,1557],{},"{\"Move\": {...}}",[828,1559,1560],{},[345,1561,1562],{},".Move.x",[813,1564,1565,1570,1575],{},[828,1566,1567],{},[345,1568,1569],{},"tag = \"type\"",[828,1571,1572],{},[345,1573,1574],{},"{\"type\": \"move\", \"x\": 1}",[828,1576,1577,365,1580],{},[345,1578,1579],{},".type",[345,1581,1582],{},".x",[813,1584,1585,1590,1595],{},[828,1586,1587],{},[345,1588,1589],{},"tag = \"t\", content = \"c\"",[828,1591,1592],{},[345,1593,1594],{},"{\"t\": \"move\", \"c\": {...}}",[828,1596,1597,365,1600],{},[345,1598,1599],{},".t",[345,1601,1602],{},".c.x",[813,1604,1605,1610,1613],{},[828,1606,1607],{},[345,1608,1609],{},"untagged",[828,1611,1612],{},"the variant's own shape, tried in order",[828,1614,1615,1618,1619,1622],{},[345,1616,1617],{},"invalid_union"," + each variant's issues (",[345,1620,1621],{},"[variant N]",")",[341,1624,1625],{},"Variants:",[1627,1628,1629,1640,1673,1685],"ul",{},[1630,1631,1632,1635,1636,1639],"li",{},[1029,1633,1634],{},"unit",": no content (",[345,1637,1638],{},"null"," \u002F absent);",[1630,1641,1642,1645,1646,1649,1650,1652,1653,1656,1657,1660,1661,854,1663,1665,1666,1669,1670,1672],{},[1029,1643,1644],{},"newtype"," ",[345,1647,1648],{},"V(T)",": ",[345,1651,795],{}," on the field, or none when ",[345,1654,1655],{},"T"," has ",[345,1658,1659],{},"parse_value"," (",[345,1662,84],{},[345,1664,354],{},"): ",[345,1667,1668],{},"vld::nested!(T)"," is used, and the JSON Schema references ",[345,1671,1655],{},";",[1630,1674,1675,1645,1678,1681,1682,1684],{},[1029,1676,1677],{},"tuple",[345,1679,1680],{},"V(A, B)",": a JSON array, ",[345,1683,795],{}," on every field (not with internal tagging, as in serde);",[1630,1686,1687,1645,1689,1692,1693,365,1695,365,1698,365,1700,593],{},[1029,1688,555],{},[345,1690,1691],{},"V { .. }",": fields exactly as in a struct (",[345,1694,795],{},[345,1696,1697],{},"rename",[345,1699,1018],{},[345,1701,1002],{},[341,1703,1704,1705,365,1708,365,1710,365,1712,1715,1716,1719,1720,365,1722,365,1724,854,1726,365,1728,1731,1732,1734,1735,365,1737,1740,1741,1744,1745,1748,1749,1751],{},"Serde attributes: enum ",[345,1706,1707],{},"tag",[345,1709,1088],{},[345,1711,1609],{},[345,1713,1714],{},"rename_all"," (variant names), ",[345,1717,1718],{},"rename_all_fields","; variant ",[345,1721,1697],{},[345,1723,1107],{},[345,1725,1002],{},[345,1727,1005],{},[345,1729,1730],{},"other"," (unit variant for unknown tags), ",[345,1733,1714],{}," (its fields). Variant-level ",[345,1736,1609],{},[345,1738,1739],{},"with"," and ",[345,1742,1743],{},"deserialize_with"," are compile errors. Unknown fields are ignored unless the enum has ",[345,1746,1747],{},"#[serde(deny_unknown_fields)]"," (see the table above); there vld also rejects extra keys next to the tag of a ",[1029,1750,1634],{}," variant, which serde lets through.",[341,1753,1754,1755,1758,1759,1762,1763,1766,1767,1769],{},"The JSON Schema is a ",[345,1756,1757],{},"oneOf"," with an OpenAPI ",[345,1760,1761],{},"discriminator"," for tagged enums, ",[345,1764,1765],{},"anyOf"," for untagged ones. ",[345,1768,926],{}," is struct-only.",[802,1771,1773],{"id":1772},"generics","Generics",[341,1775,1776],{},"Generic structs work. Their field schemas are rebuilt on every call (non-generic structs cache them, see below).",[374,1778,1780],{"className":439,"code":1779,"language":441,"meta":380,"style":380},"use vld::schema::VldParse;\n\n#[derive(Debug, Validate)]\npub struct Page\u003CT: VldParse> {\n    #[vld(vld::array(vld::nested(T::vld_parse_value)))]\n    pub items: Vec\u003CT>,\n}\n",[345,1781,1782,1800,1804,1820,1845,1881,1900],{"__ignoreMap":380},[384,1783,1784,1786,1788,1790,1793,1795,1798],{"class":386,"line":387},[384,1785,449],{"class":448},[384,1787,453],{"class":452},[384,1789,456],{"class":394},[384,1791,1792],{"class":452},"schema",[384,1794,456],{"class":394},[384,1796,1797],{"class":452},"VldParse",[384,1799,477],{"class":394},[384,1801,1802],{"class":386,"line":465},[384,1803,484],{"emptyLinePlaceholder":483},[384,1805,1806,1808,1810,1812,1814,1816,1818],{"class":386,"line":480},[384,1807,490],{"class":394},[384,1809,347],{"class":390},[384,1811,495],{"class":394},[384,1813,498],{"class":452},[384,1815,416],{"class":394},[384,1817,522],{"class":452},[384,1819,525],{"class":394},[384,1821,1822,1825,1828,1831,1833,1835,1837,1840,1843],{"class":386,"line":487},[384,1823,1824],{"class":554},"pub",[384,1826,1827],{"class":554}," struct",[384,1829,1830],{"class":452}," Page",[384,1832,706],{"class":394},[384,1834,1655],{"class":452},[384,1836,613],{"class":394},[384,1838,1839],{"class":452}," VldParse",[384,1841,1842],{"class":394},">",[384,1844,561],{"class":394},[384,1846,1847,1849,1851,1853,1855,1857,1860,1862,1864,1866,1869,1871,1873,1875,1878],{"class":386,"line":528},[384,1848,567],{"class":394},[384,1850,570],{"class":390},[384,1852,495],{"class":394},[384,1854,570],{"class":390},[384,1856,456],{"class":394},[384,1858,1859],{"class":390},"array",[384,1861,495],{"class":394},[384,1863,570],{"class":390},[384,1865,456],{"class":394},[384,1867,1868],{"class":390},"nested",[384,1870,495],{"class":394},[384,1872,1655],{"class":452},[384,1874,456],{"class":394},[384,1876,1877],{"class":390},"vld_parse_value",[384,1879,1880],{"class":394},")))]\n",[384,1882,1883,1886,1889,1891,1894,1896,1898],{"class":386,"line":551},[384,1884,1885],{"class":554},"    pub",[384,1887,1888],{"class":390}," items",[384,1890,613],{"class":394},[384,1892,1893],{"class":452}," Vec",[384,1895,706],{"class":394},[384,1897,1655],{"class":452},[384,1899,712],{"class":394},[384,1901,1902],{"class":386,"line":564},[384,1903,718],{"class":394},[802,1905,92],{"id":1906},"lenient-parsing",[341,1908,1909,1911,1912,1740,1915,1918,1919,1740,1922,1924,1925,778],{},[345,1910,926],{}," on the struct adds ",[345,1913,1914],{},"validate_fields()",[345,1916,1917],{},"parse_lenient()",". Every field type must implement ",[345,1920,1921],{},"Default",[345,1923,508],{},". See ",[357,1926,92],{"href":93},[374,1928,1930],{"className":439,"code":1929,"language":441,"meta":380,"style":380},"#[derive(Debug, Default, serde::Serialize, Validate)]\n#[vld(lenient)]\nstruct Config {\n    #[vld(vld::string().min(1))]\n    host: String,\n    #[vld(vld::number().int().min(1).max(65535))]\n    port: i64,\n}\n\nlet r = Config::parse_lenient_value(&serde_json::json!({\"host\": \"h\", \"port\": 0})).unwrap();\nassert_eq!(r.error_count(), 1);\nassert_eq!(r.value.port, 0); \u002F\u002F invalid field fell back to Default\n",[345,1931,1932,1961,1974,1983,2007,2018,2055,2066,2070,2074,2141,2161],{"__ignoreMap":380},[384,1933,1934,1936,1938,1940,1942,1944,1947,1949,1951,1953,1955,1957,1959],{"class":386,"line":387},[384,1935,490],{"class":394},[384,1937,347],{"class":390},[384,1939,495],{"class":394},[384,1941,498],{"class":452},[384,1943,416],{"class":394},[384,1945,1946],{"class":452}," Default",[384,1948,416],{"class":394},[384,1950,503],{"class":390},[384,1952,456],{"class":394},[384,1954,508],{"class":452},[384,1956,416],{"class":394},[384,1958,522],{"class":452},[384,1960,525],{"class":394},[384,1962,1963,1965,1967,1969,1972],{"class":386,"line":465},[384,1964,490],{"class":394},[384,1966,570],{"class":390},[384,1968,495],{"class":394},[384,1970,1971],{"class":390},"lenient",[384,1973,525],{"class":394},[384,1975,1976,1978,1981],{"class":386,"line":480},[384,1977,555],{"class":554},[384,1979,1980],{"class":452}," Config",[384,1982,561],{"class":394},[384,1984,1985,1987,1989,1991,1993,1995,1997,1999,2001,2003,2005],{"class":386,"line":487},[384,1986,567],{"class":394},[384,1988,570],{"class":390},[384,1990,495],{"class":394},[384,1992,570],{"class":390},[384,1994,456],{"class":394},[384,1996,579],{"class":390},[384,1998,582],{"class":394},[384,2000,585],{"class":390},[384,2002,495],{"class":394},[384,2004,1388],{"class":390},[384,2006,604],{"class":394},[384,2008,2009,2012,2014,2016],{"class":386,"line":528},[384,2010,2011],{"class":390},"    host",[384,2013,613],{"class":394},[384,2015,616],{"class":452},[384,2017,619],{"class":394},[384,2019,2020,2022,2024,2026,2028,2030,2032,2034,2036,2038,2040,2042,2044,2046,2048,2050,2053],{"class":386,"line":551},[384,2021,567],{"class":394},[384,2023,570],{"class":390},[384,2025,495],{"class":394},[384,2027,570],{"class":390},[384,2029,456],{"class":394},[384,2031,670],{"class":390},[384,2033,582],{"class":394},[384,2035,675],{"class":390},[384,2037,582],{"class":394},[384,2039,585],{"class":390},[384,2041,495],{"class":394},[384,2043,1388],{"class":390},[384,2045,593],{"class":394},[384,2047,596],{"class":390},[384,2049,495],{"class":394},[384,2051,2052],{"class":390},"65535",[384,2054,604],{"class":394},[384,2056,2057,2060,2062,2064],{"class":386,"line":564},[384,2058,2059],{"class":390},"    port",[384,2061,613],{"class":394},[384,2063,1400],{"class":452},[384,2065,619],{"class":394},[384,2067,2068],{"class":386,"line":607},[384,2069,718],{"class":394},[384,2071,2072],{"class":386,"line":622},[384,2073,484],{"emptyLinePlaceholder":483},[384,2075,2076,2078,2081,2083,2085,2087,2090,2093,2096,2098,2101,2104,2106,2109,2111,2113,2115,2118,2120,2122,2124,2127,2129,2131,2134,2137,2139],{"class":386,"line":645},[384,2077,729],{"class":554},[384,2079,2080],{"class":390}," r ",[384,2082,395],{"class":394},[384,2084,1980],{"class":452},[384,2086,456],{"class":394},[384,2088,2089],{"class":741},"parse_lenient_value",[384,2091,2092],{"class":394},"(&",[384,2094,2095],{"class":452},"serde_json",[384,2097,456],{"class":394},[384,2099,2100],{"class":741},"json!",[384,2102,2103],{"class":394},"({",[384,2105,413],{"class":394},[384,2107,2108],{"class":409},"host",[384,2110,413],{"class":394},[384,2112,613],{"class":394},[384,2114,406],{"class":394},[384,2116,2117],{"class":409},"h",[384,2119,413],{"class":394},[384,2121,416],{"class":394},[384,2123,406],{"class":394},[384,2125,2126],{"class":409},"port",[384,2128,413],{"class":394},[384,2130,613],{"class":394},[384,2132,2133],{"class":448}," 0",[384,2135,2136],{"class":394},"})).",[384,2138,761],{"class":741},[384,2140,764],{"class":394},[384,2142,2143,2145,2147,2149,2151,2154,2156,2159],{"class":386,"line":657},[384,2144,770],{"class":741},[384,2146,495],{"class":394},[384,2148,747],{"class":390},[384,2150,778],{"class":394},[384,2152,2153],{"class":741},"error_count",[384,2155,1514],{"class":394},[384,2157,2158],{"class":448}," 1",[384,2160,789],{"class":394},[384,2162,2163,2165,2167,2169,2171,2174,2176,2178,2180,2182,2184],{"class":386,"line":695},[384,2164,770],{"class":741},[384,2166,495],{"class":394},[384,2168,747],{"class":390},[384,2170,778],{"class":394},[384,2172,2173],{"class":390},"value",[384,2175,778],{"class":394},[384,2177,2126],{"class":390},[384,2179,416],{"class":394},[384,2181,2133],{"class":448},[384,2183,1524],{"class":394},[384,2185,2186],{"class":1317}," \u002F\u002F invalid field fell back to Default\n",[802,2188,2190],{"id":2189},"openapi-parameters","OpenAPI parameters",[341,2192,2193,2194,2197,2198,2201,2202,365,2205,365,2208,2211,2212,2216],{},"For ",[345,2195,2196],{},"utoipa::IntoParams",", add ",[345,2199,2200],{},"#[into_params(parameter_in = Query)]"," (or ",[345,2203,2204],{},"Path",[345,2206,2207],{},"Header",[345,2209,2210],{},"Cookie",") to the struct; the derive records it and ",[357,2213,2214],{"href":199},[345,2215,198],{}," uses it.",[802,2218,2220],{"id":2219},"caching","Caching",[341,2222,2223,2224,2229,2230,2233],{},"Field schemas of non-generic structs are built once per process and cached, exactly as with ",[357,2225,2227],{"href":2226},"\u002Fstructs\u002Fschema-macro#schema-caching",[345,2228,354],{},": they must be ",[345,2231,2232],{},"Send + Sync + 'static",", and values captured on first use are frozen.",[2235,2236,2237],"style",{},"html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}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}",{"title":380,"searchDepth":465,"depth":480,"links":2239},[2240,2241,2242,2243,2244,2245,2246],{"id":804,"depth":465,"text":805},{"id":929,"depth":465,"text":930},{"id":1130,"depth":465,"text":1131},{"id":1772,"depth":465,"text":1773},{"id":1906,"depth":465,"text":92},{"id":2189,"depth":465,"text":2190},{"id":2219,"depth":465,"text":2220},"The derive macro for structs and enums — field attributes, serde renames and tagging, skip and default, generics and lenient parsing.","md",null,{},{"title":84,"description":2247},"3yv6XmYW4crhAbieAzSLr6xN66TKmj2ctdlA0et78xg",[2254,2256],{"title":80,"path":81,"stem":82,"description":2255,"children":-1},"Declare validated structs with vld::schema!, rename fields, nest structs and add validation to existing types.",{"title":88,"path":89,"stem":90,"description":2257,"children":-1},"When to parse input into a struct and when to validate an existing value, and which field names each one uses.",1794036359509]