[{"data":1,"prerenderedAt":1414},["ShallowReactive",2],{"navigation":3,"\u002Ferrors\u002Foverview":335,"\u002Ferrors\u002Foverview-surround":1409},[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":102,"body":337,"description":1403,"extension":1404,"links":1405,"meta":1406,"navigation":414,"path":103,"seo":1407,"stem":104,"__hash__":1408},"docs\u002F4.errors\u002F1.overview.md",{"type":338,"value":339,"toc":1397},"minimark",[340,349,581,602,607,928,982,988,991,1008,1016,1021,1025,1045,1049,1055,1283,1387,1393],[341,342,343,344,348],"p",{},"Every failed parse returns a ",[345,346,347],"code",{},"VldError",". It is a list of issues; parsing continues after the first problem, so you get all of them at once.",[350,351,356],"pre",{"className":352,"code":353,"language":354,"meta":355,"style":355},"language-rust shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pub struct VldError {\n    pub issues: Vec\u003CValidationIssue>,\n}\n\npub struct ValidationIssue {\n    pub code: IssueCode,               \u002F\u002F what went wrong, with parameters\n    pub message: String,               \u002F\u002F human-readable text\n    pub path: Vec\u003CPathSegment>,        \u002F\u002F where: [Field(\"items\"), Index(0), Field(\"sku\")]\n    pub received: Option\u003Cserde_json::Value>, \u002F\u002F the offending value, when known\n}\n\npub enum PathSegment {\n    Field(String), \u002F\u002F displayed as \".name\"\n    Index(usize),  \u002F\u002F displayed as \"[0]\"\n}\n","rust","",[345,357,358,378,403,409,416,428,448,466,489,518,523,528,541,560,576],{"__ignoreMap":355},[359,360,363,367,370,374],"span",{"class":361,"line":362},"line",1,[359,364,366],{"class":365},"spNyl","pub",[359,368,369],{"class":365}," struct",[359,371,373],{"class":372},"sBMFI"," VldError",[359,375,377],{"class":376},"sMK4o"," {\n",[359,379,381,384,388,391,394,397,400],{"class":361,"line":380},2,[359,382,383],{"class":365},"    pub",[359,385,387],{"class":386},"sTEyZ"," issues",[359,389,390],{"class":376},":",[359,392,393],{"class":372}," Vec",[359,395,396],{"class":376},"\u003C",[359,398,399],{"class":372},"ValidationIssue",[359,401,402],{"class":376},">,\n",[359,404,406],{"class":361,"line":405},3,[359,407,408],{"class":376},"}\n",[359,410,412],{"class":361,"line":411},4,[359,413,415],{"emptyLinePlaceholder":414},true,"\n",[359,417,419,421,423,426],{"class":361,"line":418},5,[359,420,366],{"class":365},[359,422,369],{"class":365},[359,424,425],{"class":372}," ValidationIssue",[359,427,377],{"class":376},[359,429,431,433,436,438,441,444],{"class":361,"line":430},6,[359,432,383],{"class":365},[359,434,435],{"class":386}," code",[359,437,390],{"class":376},[359,439,440],{"class":372}," IssueCode",[359,442,443],{"class":376},",",[359,445,447],{"class":446},"sHwdD","               \u002F\u002F what went wrong, with parameters\n",[359,449,451,453,456,458,461,463],{"class":361,"line":450},7,[359,452,383],{"class":365},[359,454,455],{"class":386}," message",[359,457,390],{"class":376},[359,459,460],{"class":372}," String",[359,462,443],{"class":376},[359,464,465],{"class":446},"               \u002F\u002F human-readable text\n",[359,467,469,471,474,476,478,480,483,486],{"class":361,"line":468},8,[359,470,383],{"class":365},[359,472,473],{"class":386}," path",[359,475,390],{"class":376},[359,477,393],{"class":372},[359,479,396],{"class":376},[359,481,482],{"class":372},"PathSegment",[359,484,485],{"class":376},">,",[359,487,488],{"class":446},"        \u002F\u002F where: [Field(\"items\"), Index(0), Field(\"sku\")]\n",[359,490,492,494,497,499,502,504,507,510,513,515],{"class":361,"line":491},9,[359,493,383],{"class":365},[359,495,496],{"class":386}," received",[359,498,390],{"class":376},[359,500,501],{"class":372}," Option",[359,503,396],{"class":376},[359,505,506],{"class":386},"serde_json",[359,508,509],{"class":376},"::",[359,511,512],{"class":372},"Value",[359,514,485],{"class":376},[359,516,517],{"class":446}," \u002F\u002F the offending value, when known\n",[359,519,521],{"class":361,"line":520},10,[359,522,408],{"class":376},[359,524,526],{"class":361,"line":525},11,[359,527,415],{"emptyLinePlaceholder":414},[359,529,531,533,536,539],{"class":361,"line":530},12,[359,532,366],{"class":365},[359,534,535],{"class":365}," enum",[359,537,538],{"class":372}," PathSegment",[359,540,377],{"class":376},[359,542,544,548,551,554,557],{"class":361,"line":543},13,[359,545,547],{"class":546},"s2Zo4","    Field",[359,549,550],{"class":376},"(",[359,552,553],{"class":372},"String",[359,555,556],{"class":376},"),",[359,558,559],{"class":446}," \u002F\u002F displayed as \".name\"\n",[359,561,563,566,568,571,573],{"class":361,"line":562},14,[359,564,565],{"class":546},"    Index",[359,567,550],{"class":376},[359,569,570],{"class":372},"usize",[359,572,556],{"class":376},[359,574,575],{"class":446},"  \u002F\u002F displayed as \"[0]\"\n",[359,577,579],{"class":361,"line":578},15,[359,580,408],{"class":376},[341,582,583,584,587,588,591,592,594,595,587,598,601],{},"All of them implement ",[345,585,586],{},"Serialize"," and ",[345,589,590],{},"Deserialize",", so you can return them from an API or store them. ",[345,593,347],{}," implements ",[345,596,597],{},"Display",[345,599,600],{},"std::error::Error",".",[603,604,606],"h2",{"id":605},"reading-issues","Reading issues",[350,608,610],{"className":352,"code":609,"language":354,"meta":355,"style":355},"use vld::prelude::*;\n\nlet schema = vld::array(vld::object().field(\"sku\", vld::string().len(8))).min_len(1);\nlet err = schema.parse(r#\"[{\"sku\": \"short\"}]\"#).unwrap_err();\n\nlet issue = &err.issues[0];\nassert_eq!(issue.code.key(), \"invalid_length\");\nassert_eq!(issue.path_string(), \"[0].sku\"); \u002F\u002F `issue.path` holds the segments\n\nmatch &issue.code {\n    IssueCode::InvalidLength { expected, .. } => assert_eq!(*expected, 8),\n    _ => unreachable!(),\n}\n",[345,611,612,629,633,711,751,755,784,816,844,848,866,910,924],{"__ignoreMap":355},[359,613,614,618,621,623,626],{"class":361,"line":362},[359,615,617],{"class":616},"sbssI","use",[359,619,620],{"class":372}," vld",[359,622,509],{"class":376},[359,624,625],{"class":372},"prelude",[359,627,628],{"class":376},"::*;\n",[359,630,631],{"class":361,"line":380},[359,632,415],{"emptyLinePlaceholder":414},[359,634,635,638,641,644,646,648,651,653,656,658,661,664,667,669,672,676,678,680,682,684,687,689,692,694,697,700,703,705,708],{"class":361,"line":405},[359,636,637],{"class":365},"let",[359,639,640],{"class":386}," schema ",[359,642,643],{"class":376},"=",[359,645,620],{"class":372},[359,647,509],{"class":376},[359,649,650],{"class":546},"array",[359,652,550],{"class":376},[359,654,655],{"class":372},"vld",[359,657,509],{"class":376},[359,659,660],{"class":546},"object",[359,662,663],{"class":376},"().",[359,665,666],{"class":546},"field",[359,668,550],{"class":376},[359,670,671],{"class":376},"\"",[359,673,675],{"class":674},"sfazB","sku",[359,677,671],{"class":376},[359,679,443],{"class":376},[359,681,620],{"class":372},[359,683,509],{"class":376},[359,685,686],{"class":546},"string",[359,688,663],{"class":376},[359,690,691],{"class":546},"len",[359,693,550],{"class":376},[359,695,696],{"class":616},"8",[359,698,699],{"class":376},"))).",[359,701,702],{"class":546},"min_len",[359,704,550],{"class":376},[359,706,707],{"class":616},"1",[359,709,710],{"class":376},");\n",[359,712,713,715,718,720,723,725,728,730,733,736,739,742,745,748],{"class":361,"line":411},[359,714,637],{"class":365},[359,716,717],{"class":386}," err ",[359,719,643],{"class":376},[359,721,722],{"class":386}," schema",[359,724,601],{"class":376},[359,726,727],{"class":546},"parse",[359,729,550],{"class":376},[359,731,732],{"class":674},"r",[359,734,735],{"class":376},"#\"",[359,737,738],{"class":674},"[{\"sku\": \"short\"}]",[359,740,741],{"class":376},"\"#",[359,743,744],{"class":376},").",[359,746,747],{"class":546},"unwrap_err",[359,749,750],{"class":376},"();\n",[359,752,753],{"class":361,"line":418},[359,754,415],{"emptyLinePlaceholder":414},[359,756,757,759,762,764,767,770,772,775,778,781],{"class":361,"line":430},[359,758,637],{"class":365},[359,760,761],{"class":386}," issue ",[359,763,643],{"class":376},[359,765,766],{"class":376}," &",[359,768,769],{"class":386},"err",[359,771,601],{"class":376},[359,773,774],{"class":386},"issues",[359,776,777],{"class":376},"[",[359,779,780],{"class":616},"0",[359,782,783],{"class":376},"];\n",[359,785,786,789,791,794,796,798,800,803,806,809,812,814],{"class":361,"line":450},[359,787,788],{"class":546},"assert_eq!",[359,790,550],{"class":376},[359,792,793],{"class":386},"issue",[359,795,601],{"class":376},[359,797,345],{"class":386},[359,799,601],{"class":376},[359,801,802],{"class":546},"key",[359,804,805],{"class":376},"(),",[359,807,808],{"class":376}," \"",[359,810,811],{"class":674},"invalid_length",[359,813,671],{"class":376},[359,815,710],{"class":376},[359,817,818,820,822,824,826,829,831,833,836,838,841],{"class":361,"line":468},[359,819,788],{"class":546},[359,821,550],{"class":376},[359,823,793],{"class":386},[359,825,601],{"class":376},[359,827,828],{"class":546},"path_string",[359,830,805],{"class":376},[359,832,808],{"class":376},[359,834,835],{"class":674},"[0].sku",[359,837,671],{"class":376},[359,839,840],{"class":376},");",[359,842,843],{"class":446}," \u002F\u002F `issue.path` holds the segments\n",[359,845,846],{"class":361,"line":491},[359,847,415],{"emptyLinePlaceholder":414},[359,849,850,854,856,858,860,863],{"class":361,"line":520},[359,851,853],{"class":852},"s7zQu","match",[359,855,766],{"class":376},[359,857,793],{"class":386},[359,859,601],{"class":376},[359,861,862],{"class":386},"code ",[359,864,865],{"class":376},"{\n",[359,867,868,871,873,876,879,882,884,887,890,893,896,899,902,904,907],{"class":361,"line":525},[359,869,870],{"class":372},"    IssueCode",[359,872,509],{"class":376},[359,874,875],{"class":372},"InvalidLength",[359,877,878],{"class":376}," {",[359,880,881],{"class":386}," expected",[359,883,443],{"class":376},[359,885,886],{"class":376}," ..",[359,888,889],{"class":376}," }",[359,891,892],{"class":376}," =>",[359,894,895],{"class":546}," assert_eq!",[359,897,898],{"class":376},"(*",[359,900,901],{"class":386},"expected",[359,903,443],{"class":376},[359,905,906],{"class":616}," 8",[359,908,909],{"class":376},"),\n",[359,911,912,915,918,921],{"class":361,"line":530},[359,913,914],{"class":386},"    _ ",[359,916,917],{"class":376},"=>",[359,919,920],{"class":546}," unreachable!",[359,922,923],{"class":376},"(),\n",[359,925,926],{"class":361,"line":543},[359,927,408],{"class":376},[929,930,931,942,956,970],"ul",{},[932,933,934,937,938,941],"li",{},[345,935,936],{},"issue.path_string()"," joins the path (",[345,939,940],{},".user.tags[0]",", empty for the root).",[932,943,944,947,948,951,952,955],{},[345,945,946],{},"issue.code.key()"," is a stable snake_case string (",[345,949,950],{},"too_small",", ",[345,953,954],{},"invalid_string",", …). Prefer it over matching messages.",[932,957,958,961,962,965,966,969],{},[345,959,960],{},"IssueCode"," is ",[345,963,964],{},"#[non_exhaustive]",": add a ",[345,967,968],{},"_ =>"," arm when you match on it.",[932,971,972,975,976,951,979,981],{},[345,973,974],{},"issue.code.params()"," returns the template parameters (",[345,977,978],{},"minimum",[345,980,901],{},", …) as strings.",[341,983,984,985,601],{},"The full list of codes is on ",[986,987,106],"a",{"href":107},[603,989,597],{"id":990},"display",[341,992,993,995,996,999,1000,1003,1004,1007],{},[345,994,597],{}," prints one line per issue: ",[345,997,998],{},"path: message",", plus ",[345,1001,1002],{},", received \u003Cvalue>"," when the value is known (except for ",[345,1005,1006],{},"invalid_type",", whose message already names the received type).",[350,1009,1014],{"className":1010,"code":1012,"language":1013,"meta":355},[1011],"language-text",".name: String must be at least 2 characters, received \"A\"\n.email: Invalid email address, received \"nope\"\n.address.zip: Required field is missing\n","text",[345,1015,1012],{"__ignoreMap":355},[341,1017,1018,1019,601],{},"For other layouts see ",[986,1020,110],{"href":111},[603,1022,1024],{"id":1023},"missing-vs-null","Missing vs null",[341,1026,1027,1028,1031,1032,1035,1036,1038,1039,1041,1042,1044],{},"An absent required key reports ",[345,1029,1030],{},"missing_field"," (\"Required field is missing\"). A key that is present with ",[345,1033,1034],{},"null"," reports ",[345,1037,1006],{}," (expected ",[345,1040,686],{},", received ",[345,1043,1034],{},"). Optional, nullable and defaulted fields accept both.",[603,1046,1048],{"id":1047},"building-errors-yourself","Building errors yourself",[341,1050,1051,1052,1054],{},"Use ",[345,1053,347],{}," in custom checks and when combining validations:",[350,1056,1058],{"className":352,"code":1057,"language":354,"meta":355,"style":355},"let mut errors = VldError::new();\nerrors\n    .issue(IssueCode::Custom { code: \"passwords_differ\".into() })\n    .message(\"Passwords do not match\")\n    .path_field(\"confirm\")\n    .finish();\nerrors.push(IssueCode::Custom { code: \"weak\".into() }, \"Password is too weak\");\n\nassert_eq!(errors.issues.len(), 2);\nassert_eq!(errors.issues[0].code.key(), \"passwords_differ\");\n",[345,1059,1060,1081,1086,1126,1145,1163,1172,1221,1225,1248],{"__ignoreMap":355},[359,1061,1062,1064,1067,1070,1072,1074,1076,1079],{"class":361,"line":362},[359,1063,637],{"class":365},[359,1065,1066],{"class":365}," mut",[359,1068,1069],{"class":386}," errors ",[359,1071,643],{"class":376},[359,1073,373],{"class":372},[359,1075,509],{"class":376},[359,1077,1078],{"class":546},"new",[359,1080,750],{"class":376},[359,1082,1083],{"class":361,"line":380},[359,1084,1085],{"class":386},"errors\n",[359,1087,1088,1091,1093,1095,1097,1099,1102,1104,1106,1108,1110,1113,1115,1117,1120,1123],{"class":361,"line":405},[359,1089,1090],{"class":376},"    .",[359,1092,793],{"class":546},[359,1094,550],{"class":376},[359,1096,960],{"class":372},[359,1098,509],{"class":376},[359,1100,1101],{"class":372},"Custom",[359,1103,878],{"class":376},[359,1105,435],{"class":386},[359,1107,390],{"class":376},[359,1109,808],{"class":376},[359,1111,1112],{"class":674},"passwords_differ",[359,1114,671],{"class":376},[359,1116,601],{"class":376},[359,1118,1119],{"class":546},"into",[359,1121,1122],{"class":376},"()",[359,1124,1125],{"class":376}," })\n",[359,1127,1128,1130,1133,1135,1137,1140,1142],{"class":361,"line":411},[359,1129,1090],{"class":376},[359,1131,1132],{"class":546},"message",[359,1134,550],{"class":376},[359,1136,671],{"class":376},[359,1138,1139],{"class":674},"Passwords do not match",[359,1141,671],{"class":376},[359,1143,1144],{"class":376},")\n",[359,1146,1147,1149,1152,1154,1156,1159,1161],{"class":361,"line":418},[359,1148,1090],{"class":376},[359,1150,1151],{"class":546},"path_field",[359,1153,550],{"class":376},[359,1155,671],{"class":376},[359,1157,1158],{"class":674},"confirm",[359,1160,671],{"class":376},[359,1162,1144],{"class":376},[359,1164,1165,1167,1170],{"class":361,"line":430},[359,1166,1090],{"class":376},[359,1168,1169],{"class":546},"finish",[359,1171,750],{"class":376},[359,1173,1174,1177,1179,1182,1184,1186,1188,1190,1192,1194,1196,1198,1201,1203,1205,1207,1209,1212,1214,1217,1219],{"class":361,"line":450},[359,1175,1176],{"class":386},"errors",[359,1178,601],{"class":376},[359,1180,1181],{"class":546},"push",[359,1183,550],{"class":376},[359,1185,960],{"class":372},[359,1187,509],{"class":376},[359,1189,1101],{"class":372},[359,1191,878],{"class":376},[359,1193,435],{"class":386},[359,1195,390],{"class":376},[359,1197,808],{"class":376},[359,1199,1200],{"class":674},"weak",[359,1202,671],{"class":376},[359,1204,601],{"class":376},[359,1206,1119],{"class":546},[359,1208,1122],{"class":376},[359,1210,1211],{"class":376}," },",[359,1213,808],{"class":376},[359,1215,1216],{"class":674},"Password is too weak",[359,1218,671],{"class":376},[359,1220,710],{"class":376},[359,1222,1223],{"class":361,"line":468},[359,1224,415],{"emptyLinePlaceholder":414},[359,1226,1227,1229,1231,1233,1235,1237,1239,1241,1243,1246],{"class":361,"line":491},[359,1228,788],{"class":546},[359,1230,550],{"class":376},[359,1232,1176],{"class":386},[359,1234,601],{"class":376},[359,1236,774],{"class":386},[359,1238,601],{"class":376},[359,1240,691],{"class":546},[359,1242,805],{"class":376},[359,1244,1245],{"class":616}," 2",[359,1247,710],{"class":376},[359,1249,1250,1252,1254,1256,1258,1260,1262,1264,1267,1269,1271,1273,1275,1277,1279,1281],{"class":361,"line":520},[359,1251,788],{"class":546},[359,1253,550],{"class":376},[359,1255,1176],{"class":386},[359,1257,601],{"class":376},[359,1259,774],{"class":386},[359,1261,777],{"class":376},[359,1263,780],{"class":616},[359,1265,1266],{"class":376},"].",[359,1268,345],{"class":386},[359,1270,601],{"class":376},[359,1272,802],{"class":546},[359,1274,805],{"class":376},[359,1276,808],{"class":376},[359,1278,1112],{"class":674},[359,1280,671],{"class":376},[359,1282,710],{"class":376},[1284,1285,1286,1299],"table",{},[1287,1288,1289],"thead",{},[1290,1291,1292,1296],"tr",{},[1293,1294,1295],"th",{},"Method",[1293,1297,1298],{},"Purpose",[1300,1301,1302,1320,1337,1357,1367,1377],"tbody",{},[1290,1303,1304,1317],{},[1305,1306,1307,1310,1311,1310,1314],"td",{},[345,1308,1309],{},"VldError::new()"," \u002F ",[345,1312,1313],{},"single(code, msg)",[345,1315,1316],{},"from_code(code)",[1305,1318,1319],{},"create",[1290,1321,1322,1330],{},[1305,1323,1324,1310,1327],{},[345,1325,1326],{},"push(code, msg)",[345,1328,1329],{},"push_code(code)",[1305,1331,1332,1333,1336],{},"add an issue (",[345,1334,1335],{},"push_code"," uses the default message)",[1290,1338,1339,1344],{},[1305,1340,1341],{},[345,1342,1343],{},"issue(code)…finish()",[1305,1345,1346,1347,951,1349,951,1351,951,1354],{},"builder with ",[345,1348,1132],{},[345,1350,1151],{},[345,1352,1353],{},"path_index",[345,1355,1356],{},"received",[1290,1358,1359,1364],{},[1305,1360,1361],{},[345,1362,1363],{},"merge(other)",[1305,1365,1366],{},"append another error's issues",[1290,1368,1369,1374],{},[1305,1370,1371],{},[345,1372,1373],{},"with_prefix(segment)",[1305,1375,1376],{},"prepend a path segment to every issue",[1290,1378,1379,1384],{},[1305,1380,1381],{},[345,1382,1383],{},"is_empty()",[1305,1385,1386],{},"no issues",[341,1388,1389,1392],{},[345,1390,1391],{},"IssueCode::Custom { code }"," is reserved for your own codes. Built-in checks always use the typed variants.",[1394,1395,1396],"style",{},"html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}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 .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}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 .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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":355,"searchDepth":380,"depth":405,"links":1398},[1399,1400,1401,1402],{"id":605,"depth":380,"text":606},{"id":990,"depth":380,"text":597},{"id":1023,"depth":380,"text":1024},{"id":1047,"depth":380,"text":1048},"VldError, ValidationIssue, IssueCode and PathSegment.","md",null,{},{"title":102,"description":1403},"c_hCZBgiGMQVwgGNkIMDe8XY3GzHL2ldfTpOOlKIhV8",[1410,1412],{"title":92,"path":93,"stem":94,"description":1411,"children":-1},"Validate each field separately, build the struct anyway and inspect per-field results.",{"title":106,"path":107,"stem":108,"description":1413,"children":-1},"Every IssueCode variant with its key, parameters and the checks that produce it.",1794036356986]