[{"data":1,"prerenderedAt":2775},["ShallowReactive",2],{"navigation":3,"\u002Fschemas\u002Fcombinators":335,"\u002Fschemas\u002Fcombinators-surround":2770},[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":66,"body":337,"description":2764,"extension":2765,"links":2766,"meta":2767,"navigation":387,"path":67,"seo":2768,"stem":68,"__hash__":2769},"docs\u002F2.schemas\u002F8.combinators.md",{"type":338,"value":339,"toc":2752},"minimark",[340,345,349,594,671,694,713,717,734,1101,1128,1132,1146,1231,1235,1249,1342,1348,1618,1624,1628,1638,1723,1746,1928,1931,1935,1948,2043,2047,2053,2278,2281,2290,2447,2451,2457,2607,2610,2614,2641,2748],[341,342,344],"h2",{"id":343},"union","Union",[346,347,348],"p",{},"A union tries its variants in order and returns the first success.",[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","use vld::prelude::*;\n\nlet id = vld::union(vld::u64(), vld::string().uuid());\nmatch id.parse(\"42\").unwrap() {\n    Either::Left(n) => assert_eq!(n, 42),\n    Either::Right(_) => unreachable!(),\n}\n\n\u002F\u002F Same thing as a method:\nlet id = vld::u64().or(vld::string().uuid());\n","rust","",[357,358,359,382,389,440,479,517,542,548,553,560],"code",{"__ignoreMap":355},[360,361,364,368,372,376,379],"span",{"class":362,"line":363},"line",1,[360,365,367],{"class":366},"sbssI","use",[360,369,371],{"class":370},"sBMFI"," vld",[360,373,375],{"class":374},"sMK4o","::",[360,377,378],{"class":370},"prelude",[360,380,381],{"class":374},"::*;\n",[360,383,385],{"class":362,"line":384},2,[360,386,388],{"emptyLinePlaceholder":387},true,"\n",[360,390,392,396,400,403,405,407,410,413,416,418,421,424,426,428,431,434,437],{"class":362,"line":391},3,[360,393,395],{"class":394},"spNyl","let",[360,397,399],{"class":398},"sTEyZ"," id ",[360,401,402],{"class":374},"=",[360,404,371],{"class":370},[360,406,375],{"class":374},[360,408,343],{"class":409},"s2Zo4",[360,411,412],{"class":374},"(",[360,414,415],{"class":370},"vld",[360,417,375],{"class":374},[360,419,420],{"class":409},"u64",[360,422,423],{"class":374},"(),",[360,425,371],{"class":370},[360,427,375],{"class":374},[360,429,430],{"class":409},"string",[360,432,433],{"class":374},"().",[360,435,436],{"class":409},"uuid",[360,438,439],{"class":374},"());\n",[360,441,443,447,450,453,456,458,461,465,467,470,473,476],{"class":362,"line":442},4,[360,444,446],{"class":445},"s7zQu","match",[360,448,449],{"class":398}," id",[360,451,452],{"class":374},".",[360,454,455],{"class":409},"parse",[360,457,412],{"class":374},[360,459,460],{"class":374},"\"",[360,462,464],{"class":463},"sfazB","42",[360,466,460],{"class":374},[360,468,469],{"class":374},").",[360,471,472],{"class":409},"unwrap",[360,474,475],{"class":374},"()",[360,477,478],{"class":374}," {\n",[360,480,482,485,487,490,492,495,498,501,504,506,508,511,514],{"class":362,"line":481},5,[360,483,484],{"class":370},"    Either",[360,486,375],{"class":374},[360,488,489],{"class":409},"Left",[360,491,412],{"class":374},[360,493,494],{"class":398},"n",[360,496,497],{"class":374},")",[360,499,500],{"class":374}," =>",[360,502,503],{"class":409}," assert_eq!",[360,505,412],{"class":374},[360,507,494],{"class":398},[360,509,510],{"class":374},",",[360,512,513],{"class":366}," 42",[360,515,516],{"class":374},"),\n",[360,518,520,522,524,527,529,532,534,536,539],{"class":362,"line":519},6,[360,521,484],{"class":370},[360,523,375],{"class":374},[360,525,526],{"class":409},"Right",[360,528,412],{"class":374},[360,530,531],{"class":398},"_",[360,533,497],{"class":374},[360,535,500],{"class":374},[360,537,538],{"class":409}," unreachable!",[360,540,541],{"class":374},"(),\n",[360,543,545],{"class":362,"line":544},7,[360,546,547],{"class":374},"}\n",[360,549,551],{"class":362,"line":550},8,[360,552,388],{"emptyLinePlaceholder":387},[360,554,556],{"class":362,"line":555},9,[360,557,559],{"class":558},"sHwdD","\u002F\u002F Same thing as a method:\n",[360,561,563,565,567,569,571,573,575,577,580,582,584,586,588,590,592],{"class":362,"line":562},10,[360,564,395],{"class":394},[360,566,399],{"class":398},[360,568,402],{"class":374},[360,570,371],{"class":370},[360,572,375],{"class":374},[360,574,420],{"class":409},[360,576,433],{"class":374},[360,578,579],{"class":409},"or",[360,581,412],{"class":374},[360,583,415],{"class":370},[360,585,375],{"class":374},[360,587,430],{"class":409},[360,589,433],{"class":374},[360,591,436],{"class":409},[360,593,439],{"class":374},[595,596,597,610],"table",{},[598,599,600],"thead",{},[601,602,603,607],"tr",{},[604,605,606],"th",{},"API",[604,608,609],{},"Output",[611,612,613,645,657],"tbody",{},[601,614,615,625],{},[616,617,618,621,622],"td",{},[357,619,620],{},"vld::union(a, b)"," \u002F ",[357,623,624],{},"a.or(b)",[616,626,627,630,631,634,635,634,638,634,641,644],{},[357,628,629],{},"Either\u003CA, B>"," (",[357,632,633],{},"is_left()",", ",[357,636,637],{},"left()",[357,639,640],{},"right()",[357,642,643],{},"into_inner()"," when both sides have the same type)",[601,646,647,652],{},[616,648,649],{},[357,650,651],{},"vld::union3(a, b, c)",[616,653,654],{},[357,655,656],{},"Either3\u003CA, B, C>",[601,658,659,664],{},[616,660,661],{},[357,662,663],{},"vld::union!(a, b, c, d, …)",[616,665,666,667,670],{},"any number of schemas; 4+ are nested ",[357,668,669],{},"Either","s, first match wins",[346,672,673,621,675,678,679,682,683,686,687,690,691,452],{},[357,674,669],{},[357,676,677],{},"Either3"," serialize as the bare value (serde ",[357,680,681],{},"untagged","): a union inside an object comes back as ",[357,684,685],{},"\"x\""," or ",[357,688,689],{},"5",", not ",[357,692,693],{},"{\"Left\": \"x\"}",[346,695,696,697,700,701,704,705,708,709,712],{},"When every variant fails, the error starts with one ",[357,698,699],{},"invalid_union"," issue (with the received value), followed by each variant's issues with messages prefixed ",[357,702,703],{},"[variant N]",". Nested unions from ",[357,706,707],{},"union!"," are flattened, so ",[357,710,711],{},"N"," counts the leaf schemas.",[341,714,716],{"id":715},"discriminated-union","Discriminated union",[346,718,719,722,723,726,727,452],{},[357,720,721],{},"vld::discriminated_union(field)"," reads one field and picks the variant by its value, instead of trying each schema. The output is the validated object (",[357,724,725],{},"serde_json::Value","). For a typed result from a serde-tagged enum, use ",[728,729,731,733],"a",{"href":730},"\u002Fstructs\u002Fderive#enums",[357,732,84],{}," on the enum",[350,735,737],{"className":352,"code":736,"language":354,"meta":355,"style":355},"let shape = vld::discriminated_union(\"type\")\n    .variant_str(\"circle\", vld::object()\n        .field(\"type\", vld::literal(\"circle\"))\n        .field(\"radius\", vld::number().positive()))\n    .variant_str(\"rect\", vld::object()\n        .field(\"type\", vld::literal(\"rect\"))\n        .field(\"w\", vld::number().positive())\n        .field(\"h\", vld::number().positive()));\n\nassert!(shape.parse(r#\"{\"type\": \"circle\", \"radius\": 2}\"#).is_ok());\nlet err = shape.parse(r#\"{\"type\": \"triangle\"}\"#).unwrap_err();\nassert_eq!(err.issues[0].code.key(), \"invalid_discriminator\");\n",[357,738,739,767,796,832,864,889,921,951,981,985,1020,1056],{"__ignoreMap":355},[360,740,741,743,746,748,750,752,755,757,759,762,764],{"class":362,"line":363},[360,742,395],{"class":394},[360,744,745],{"class":398}," shape ",[360,747,402],{"class":374},[360,749,371],{"class":370},[360,751,375],{"class":374},[360,753,754],{"class":409},"discriminated_union",[360,756,412],{"class":374},[360,758,460],{"class":374},[360,760,761],{"class":463},"type",[360,763,460],{"class":374},[360,765,766],{"class":374},")\n",[360,768,769,772,775,777,779,782,784,786,788,790,793],{"class":362,"line":384},[360,770,771],{"class":374},"    .",[360,773,774],{"class":409},"variant_str",[360,776,412],{"class":374},[360,778,460],{"class":374},[360,780,781],{"class":463},"circle",[360,783,460],{"class":374},[360,785,510],{"class":374},[360,787,371],{"class":370},[360,789,375],{"class":374},[360,791,792],{"class":409},"object",[360,794,795],{"class":374},"()\n",[360,797,798,801,804,806,808,810,812,814,816,818,821,823,825,827,829],{"class":362,"line":391},[360,799,800],{"class":374},"        .",[360,802,803],{"class":409},"field",[360,805,412],{"class":374},[360,807,460],{"class":374},[360,809,761],{"class":463},[360,811,460],{"class":374},[360,813,510],{"class":374},[360,815,371],{"class":370},[360,817,375],{"class":374},[360,819,820],{"class":409},"literal",[360,822,412],{"class":374},[360,824,460],{"class":374},[360,826,781],{"class":463},[360,828,460],{"class":374},[360,830,831],{"class":374},"))\n",[360,833,834,836,838,840,842,845,847,849,851,853,856,858,861],{"class":362,"line":442},[360,835,800],{"class":374},[360,837,803],{"class":409},[360,839,412],{"class":374},[360,841,460],{"class":374},[360,843,844],{"class":463},"radius",[360,846,460],{"class":374},[360,848,510],{"class":374},[360,850,371],{"class":370},[360,852,375],{"class":374},[360,854,855],{"class":409},"number",[360,857,433],{"class":374},[360,859,860],{"class":409},"positive",[360,862,863],{"class":374},"()))\n",[360,865,866,868,870,872,874,877,879,881,883,885,887],{"class":362,"line":481},[360,867,771],{"class":374},[360,869,774],{"class":409},[360,871,412],{"class":374},[360,873,460],{"class":374},[360,875,876],{"class":463},"rect",[360,878,460],{"class":374},[360,880,510],{"class":374},[360,882,371],{"class":370},[360,884,375],{"class":374},[360,886,792],{"class":409},[360,888,795],{"class":374},[360,890,891,893,895,897,899,901,903,905,907,909,911,913,915,917,919],{"class":362,"line":519},[360,892,800],{"class":374},[360,894,803],{"class":409},[360,896,412],{"class":374},[360,898,460],{"class":374},[360,900,761],{"class":463},[360,902,460],{"class":374},[360,904,510],{"class":374},[360,906,371],{"class":370},[360,908,375],{"class":374},[360,910,820],{"class":409},[360,912,412],{"class":374},[360,914,460],{"class":374},[360,916,876],{"class":463},[360,918,460],{"class":374},[360,920,831],{"class":374},[360,922,923,925,927,929,931,934,936,938,940,942,944,946,948],{"class":362,"line":544},[360,924,800],{"class":374},[360,926,803],{"class":409},[360,928,412],{"class":374},[360,930,460],{"class":374},[360,932,933],{"class":463},"w",[360,935,460],{"class":374},[360,937,510],{"class":374},[360,939,371],{"class":370},[360,941,375],{"class":374},[360,943,855],{"class":409},[360,945,433],{"class":374},[360,947,860],{"class":409},[360,949,950],{"class":374},"())\n",[360,952,953,955,957,959,961,964,966,968,970,972,974,976,978],{"class":362,"line":550},[360,954,800],{"class":374},[360,956,803],{"class":409},[360,958,412],{"class":374},[360,960,460],{"class":374},[360,962,963],{"class":463},"h",[360,965,460],{"class":374},[360,967,510],{"class":374},[360,969,371],{"class":370},[360,971,375],{"class":374},[360,973,855],{"class":409},[360,975,433],{"class":374},[360,977,860],{"class":409},[360,979,980],{"class":374},"()));\n",[360,982,983],{"class":362,"line":555},[360,984,388],{"emptyLinePlaceholder":387},[360,986,987,990,992,995,997,999,1001,1004,1007,1010,1013,1015,1018],{"class":362,"line":562},[360,988,989],{"class":409},"assert!",[360,991,412],{"class":374},[360,993,994],{"class":398},"shape",[360,996,452],{"class":374},[360,998,455],{"class":409},[360,1000,412],{"class":374},[360,1002,1003],{"class":463},"r",[360,1005,1006],{"class":374},"#\"",[360,1008,1009],{"class":463},"{\"type\": \"circle\", \"radius\": 2}",[360,1011,1012],{"class":374},"\"#",[360,1014,469],{"class":374},[360,1016,1017],{"class":409},"is_ok",[360,1019,439],{"class":374},[360,1021,1023,1025,1028,1030,1033,1035,1037,1039,1041,1043,1046,1048,1050,1053],{"class":362,"line":1022},11,[360,1024,395],{"class":394},[360,1026,1027],{"class":398}," err ",[360,1029,402],{"class":374},[360,1031,1032],{"class":398}," shape",[360,1034,452],{"class":374},[360,1036,455],{"class":409},[360,1038,412],{"class":374},[360,1040,1003],{"class":463},[360,1042,1006],{"class":374},[360,1044,1045],{"class":463},"{\"type\": \"triangle\"}",[360,1047,1012],{"class":374},[360,1049,469],{"class":374},[360,1051,1052],{"class":409},"unwrap_err",[360,1054,1055],{"class":374},"();\n",[360,1057,1059,1062,1064,1067,1069,1072,1075,1078,1081,1083,1085,1088,1090,1093,1096,1098],{"class":362,"line":1058},12,[360,1060,1061],{"class":409},"assert_eq!",[360,1063,412],{"class":374},[360,1065,1066],{"class":398},"err",[360,1068,452],{"class":374},[360,1070,1071],{"class":398},"issues",[360,1073,1074],{"class":374},"[",[360,1076,1077],{"class":366},"0",[360,1079,1080],{"class":374},"].",[360,1082,357],{"class":398},[360,1084,452],{"class":374},[360,1086,1087],{"class":409},"key",[360,1089,423],{"class":374},[360,1091,1092],{"class":374}," \"",[360,1094,1095],{"class":463},"invalid_discriminator",[360,1097,460],{"class":374},[360,1099,1100],{"class":374},");\n",[346,1102,1103,1106,1107,634,1110,1113,1114,1116,1117,1120,1121,1124,1125,469],{},[357,1104,1105],{},"variant(value, schema)"," takes any JSON value as the discriminator (",[357,1108,1109],{},"1",[357,1111,1112],{},"true","); ",[357,1115,774],{}," is the string shortcut. Variants accept any ",[357,1118,1119],{},"DynSchema"," (every ",[357,1122,1123],{},"VldSchema"," whose output is ",[357,1126,1127],{},"Serialize",[341,1129,1131],{"id":1130},"intersection","Intersection",[346,1133,1134,686,1137,1140,1141,1145],{},[357,1135,1136],{},"vld::intersection(a, b)",[357,1138,1139],{},"a.and(b)"," runs both schemas on the same input. The output of the ",[1142,1143,1144],"strong",{},"first"," is returned; if either fails, all issues are merged.",[350,1147,1149],{"className":352,"code":1148,"language":354,"meta":355,"style":355},"let corporate = vld::string().email().and(vld::string().ends_with(\"@example.com\"));\nassert!(corporate.parse(r#\"\"ada@example.com\"\"#).is_ok());\n",[357,1150,1151,1201],{"__ignoreMap":355},[360,1152,1153,1155,1158,1160,1162,1164,1166,1168,1171,1173,1176,1178,1180,1182,1184,1186,1189,1191,1193,1196,1198],{"class":362,"line":363},[360,1154,395],{"class":394},[360,1156,1157],{"class":398}," corporate ",[360,1159,402],{"class":374},[360,1161,371],{"class":370},[360,1163,375],{"class":374},[360,1165,430],{"class":409},[360,1167,433],{"class":374},[360,1169,1170],{"class":409},"email",[360,1172,433],{"class":374},[360,1174,1175],{"class":409},"and",[360,1177,412],{"class":374},[360,1179,415],{"class":370},[360,1181,375],{"class":374},[360,1183,430],{"class":409},[360,1185,433],{"class":374},[360,1187,1188],{"class":409},"ends_with",[360,1190,412],{"class":374},[360,1192,460],{"class":374},[360,1194,1195],{"class":463},"@example.com",[360,1197,460],{"class":374},[360,1199,1200],{"class":374},"));\n",[360,1202,1203,1205,1207,1210,1212,1214,1216,1218,1220,1223,1225,1227,1229],{"class":362,"line":384},[360,1204,989],{"class":409},[360,1206,412],{"class":374},[360,1208,1209],{"class":398},"corporate",[360,1211,452],{"class":374},[360,1213,455],{"class":409},[360,1215,412],{"class":374},[360,1217,1003],{"class":463},[360,1219,1006],{"class":374},[360,1221,1222],{"class":463},"\"ada@example.com\"",[360,1224,1012],{"class":374},[360,1226,469],{"class":374},[360,1228,1017],{"class":409},[360,1230,439],{"class":374},[341,1232,1234],{"id":1233},"refine-and-super_refine","Refine and super_refine",[346,1236,1237,1240,1241,1244,1245,1248],{},[357,1238,1239],{},"refine(check, message)"," adds a predicate on the parsed output. A failure reports ",[357,1242,1243],{},"IssueCode::Custom { code: \"custom\" }"," with your message. For a check reused across schemas, with its own code and translatable message, write a ",[728,1246,1247],{"href":39},"rule"," instead.",[350,1250,1252],{"className":352,"code":1251,"language":354,"meta":355,"style":355},"let even = vld::number().int().refine(|n| n % 2 == 0, \"Must be even\");\nassert!(even.parse(\"3\").is_err());\n",[357,1253,1254,1313],{"__ignoreMap":355},[360,1255,1256,1258,1261,1263,1265,1267,1269,1271,1274,1276,1279,1282,1284,1287,1290,1293,1296,1299,1302,1304,1306,1309,1311],{"class":362,"line":363},[360,1257,395],{"class":394},[360,1259,1260],{"class":398}," even ",[360,1262,402],{"class":374},[360,1264,371],{"class":370},[360,1266,375],{"class":374},[360,1268,855],{"class":409},[360,1270,433],{"class":374},[360,1272,1273],{"class":409},"int",[360,1275,433],{"class":374},[360,1277,1278],{"class":409},"refine",[360,1280,1281],{"class":374},"(|",[360,1283,494],{"class":398},[360,1285,1286],{"class":374},"|",[360,1288,1289],{"class":398}," n ",[360,1291,1292],{"class":374},"%",[360,1294,1295],{"class":366}," 2",[360,1297,1298],{"class":374}," ==",[360,1300,1301],{"class":366}," 0",[360,1303,510],{"class":374},[360,1305,1092],{"class":374},[360,1307,1308],{"class":463},"Must be even",[360,1310,460],{"class":374},[360,1312,1100],{"class":374},[360,1314,1315,1317,1319,1322,1324,1326,1328,1330,1333,1335,1337,1340],{"class":362,"line":384},[360,1316,989],{"class":409},[360,1318,412],{"class":374},[360,1320,1321],{"class":398},"even",[360,1323,452],{"class":374},[360,1325,455],{"class":409},[360,1327,412],{"class":374},[360,1329,460],{"class":374},[360,1331,1332],{"class":463},"3",[360,1334,460],{"class":374},[360,1336,469],{"class":374},[360,1338,1339],{"class":409},"is_err",[360,1341,439],{"class":374},[346,1343,1344,1347],{},[357,1345,1346],{},"super_refine(|value, errors| ...)"," can push several issues with your own codes:",[350,1349,1351],{"className":352,"code":1350,"language":354,"meta":355,"style":355},"let password = vld::string().super_refine(|s, errors| {\n    if !s.chars().any(|c| c.is_ascii_digit()) {\n        errors.push(IssueCode::Custom { code: \"no_digit\".into() }, \"Add a digit\");\n    }\n    if !s.chars().any(|c| c.is_ascii_uppercase()) {\n        errors.push(IssueCode::Custom { code: \"no_upper\".into() }, \"Add an uppercase letter\");\n    }\n});\nassert_eq!(password.parse(r#\"\"secret\"\"#).unwrap_err().issues.len(), 2);\n",[357,1352,1353,1387,1427,1482,1487,1520,1566,1570,1575],{"__ignoreMap":355},[360,1354,1355,1357,1360,1362,1364,1366,1368,1370,1373,1375,1378,1380,1383,1385],{"class":362,"line":363},[360,1356,395],{"class":394},[360,1358,1359],{"class":398}," password ",[360,1361,402],{"class":374},[360,1363,371],{"class":370},[360,1365,375],{"class":374},[360,1367,430],{"class":409},[360,1369,433],{"class":374},[360,1371,1372],{"class":409},"super_refine",[360,1374,1281],{"class":374},[360,1376,1377],{"class":398},"s",[360,1379,510],{"class":374},[360,1381,1382],{"class":398}," errors",[360,1384,1286],{"class":374},[360,1386,478],{"class":374},[360,1388,1389,1392,1395,1397,1399,1402,1404,1407,1409,1412,1414,1417,1419,1422,1425],{"class":362,"line":384},[360,1390,1391],{"class":445},"    if",[360,1393,1394],{"class":374}," !",[360,1396,1377],{"class":398},[360,1398,452],{"class":374},[360,1400,1401],{"class":409},"chars",[360,1403,433],{"class":374},[360,1405,1406],{"class":409},"any",[360,1408,1281],{"class":374},[360,1410,1411],{"class":398},"c",[360,1413,1286],{"class":374},[360,1415,1416],{"class":398}," c",[360,1418,452],{"class":374},[360,1420,1421],{"class":409},"is_ascii_digit",[360,1423,1424],{"class":374},"())",[360,1426,478],{"class":374},[360,1428,1429,1432,1434,1437,1439,1442,1444,1447,1450,1453,1456,1458,1461,1463,1465,1468,1470,1473,1475,1478,1480],{"class":362,"line":391},[360,1430,1431],{"class":398},"        errors",[360,1433,452],{"class":374},[360,1435,1436],{"class":409},"push",[360,1438,412],{"class":374},[360,1440,1441],{"class":370},"IssueCode",[360,1443,375],{"class":374},[360,1445,1446],{"class":370},"Custom",[360,1448,1449],{"class":374}," {",[360,1451,1452],{"class":398}," code",[360,1454,1455],{"class":374},":",[360,1457,1092],{"class":374},[360,1459,1460],{"class":463},"no_digit",[360,1462,460],{"class":374},[360,1464,452],{"class":374},[360,1466,1467],{"class":409},"into",[360,1469,475],{"class":374},[360,1471,1472],{"class":374}," },",[360,1474,1092],{"class":374},[360,1476,1477],{"class":463},"Add a digit",[360,1479,460],{"class":374},[360,1481,1100],{"class":374},[360,1483,1484],{"class":362,"line":442},[360,1485,1486],{"class":374},"    }\n",[360,1488,1489,1491,1493,1495,1497,1499,1501,1503,1505,1507,1509,1511,1513,1516,1518],{"class":362,"line":481},[360,1490,1391],{"class":445},[360,1492,1394],{"class":374},[360,1494,1377],{"class":398},[360,1496,452],{"class":374},[360,1498,1401],{"class":409},[360,1500,433],{"class":374},[360,1502,1406],{"class":409},[360,1504,1281],{"class":374},[360,1506,1411],{"class":398},[360,1508,1286],{"class":374},[360,1510,1416],{"class":398},[360,1512,452],{"class":374},[360,1514,1515],{"class":409},"is_ascii_uppercase",[360,1517,1424],{"class":374},[360,1519,478],{"class":374},[360,1521,1522,1524,1526,1528,1530,1532,1534,1536,1538,1540,1542,1544,1547,1549,1551,1553,1555,1557,1559,1562,1564],{"class":362,"line":519},[360,1523,1431],{"class":398},[360,1525,452],{"class":374},[360,1527,1436],{"class":409},[360,1529,412],{"class":374},[360,1531,1441],{"class":370},[360,1533,375],{"class":374},[360,1535,1446],{"class":370},[360,1537,1449],{"class":374},[360,1539,1452],{"class":398},[360,1541,1455],{"class":374},[360,1543,1092],{"class":374},[360,1545,1546],{"class":463},"no_upper",[360,1548,460],{"class":374},[360,1550,452],{"class":374},[360,1552,1467],{"class":409},[360,1554,475],{"class":374},[360,1556,1472],{"class":374},[360,1558,1092],{"class":374},[360,1560,1561],{"class":463},"Add an uppercase letter",[360,1563,460],{"class":374},[360,1565,1100],{"class":374},[360,1567,1568],{"class":362,"line":544},[360,1569,1486],{"class":374},[360,1571,1572],{"class":362,"line":550},[360,1573,1574],{"class":374},"});\n",[360,1576,1577,1579,1581,1584,1586,1588,1590,1592,1594,1597,1599,1601,1603,1605,1607,1609,1612,1614,1616],{"class":362,"line":555},[360,1578,1061],{"class":409},[360,1580,412],{"class":374},[360,1582,1583],{"class":398},"password",[360,1585,452],{"class":374},[360,1587,455],{"class":409},[360,1589,412],{"class":374},[360,1591,1003],{"class":463},[360,1593,1006],{"class":374},[360,1595,1596],{"class":463},"\"secret\"",[360,1598,1012],{"class":374},[360,1600,469],{"class":374},[360,1602,1052],{"class":409},[360,1604,433],{"class":374},[360,1606,1071],{"class":398},[360,1608,452],{"class":374},[360,1610,1611],{"class":409},"len",[360,1613,423],{"class":374},[360,1615,1295],{"class":366},[360,1617,1100],{"class":374},[346,1619,1620,1621,452],{},"For issues with paths, use the builder: ",[357,1622,1623],{},"errors.issue(code).message(\"...\").path_field(\"confirm\").finish()",[341,1625,1627],{"id":1626},"transform","Transform",[346,1629,1630,1633,1634,1637],{},[357,1631,1632],{},"transform(f)"," maps the output after a successful parse; the output type changes to whatever ",[357,1635,1636],{},"f"," returns.",[350,1639,1641],{"className":352,"code":1640,"language":354,"meta":355,"style":355},"let words = vld::string().trim().transform(|s| s.split_whitespace().count());\nassert_eq!(words.parse(r#\"\"  a b c \"\"#).unwrap(), 3);\n",[357,1642,1643,1688],{"__ignoreMap":355},[360,1644,1645,1647,1650,1652,1654,1656,1658,1660,1663,1665,1667,1669,1671,1673,1676,1678,1681,1683,1686],{"class":362,"line":363},[360,1646,395],{"class":394},[360,1648,1649],{"class":398}," words ",[360,1651,402],{"class":374},[360,1653,371],{"class":370},[360,1655,375],{"class":374},[360,1657,430],{"class":409},[360,1659,433],{"class":374},[360,1661,1662],{"class":409},"trim",[360,1664,433],{"class":374},[360,1666,1626],{"class":409},[360,1668,1281],{"class":374},[360,1670,1377],{"class":398},[360,1672,1286],{"class":374},[360,1674,1675],{"class":398}," s",[360,1677,452],{"class":374},[360,1679,1680],{"class":409},"split_whitespace",[360,1682,433],{"class":374},[360,1684,1685],{"class":409},"count",[360,1687,439],{"class":374},[360,1689,1690,1692,1694,1697,1699,1701,1703,1705,1707,1710,1712,1714,1716,1718,1721],{"class":362,"line":384},[360,1691,1061],{"class":409},[360,1693,412],{"class":374},[360,1695,1696],{"class":398},"words",[360,1698,452],{"class":374},[360,1700,455],{"class":409},[360,1702,412],{"class":374},[360,1704,1003],{"class":463},[360,1706,1006],{"class":374},[360,1708,1709],{"class":463},"\"  a b c \"",[360,1711,1012],{"class":374},[360,1713,469],{"class":374},[360,1715,472],{"class":409},[360,1717,423],{"class":374},[360,1719,1720],{"class":366}," 3",[360,1722,1100],{"class":374},[346,1724,1725,1728,1729,630,1732,1735,1736,1739,1740,1742,1743,1455],{},[357,1726,1727],{},"try_transform(f)"," takes a function returning ",[357,1730,1731],{},"Result\u003CU, E>",[357,1733,1734],{},"E: Display","): an ",[357,1737,1738],{},"Err"," becomes a validation issue with code ",[357,1741,1626],{}," and the error's text as the message, so a conversion that can fail needs no ",[357,1744,1745],{},"expect",[350,1747,1749],{"className":352,"code":1748,"language":354,"meta":355,"style":355},"let amount = vld::string().try_transform(|s| s.parse::\u003Cu128>());\nassert_eq!(amount.parse(r#\"\"42\"\"#).unwrap(), 42);\n\nlet err = amount.parse(r#\"\"12x\"\"#).unwrap_err();\nassert_eq!(err.issues[0].code.key(), \"transform\");\nassert_eq!(err.issues[0].message, \"invalid digit found in string\");\n",[357,1750,1751,1792,1826,1830,1862,1896],{"__ignoreMap":355},[360,1752,1753,1755,1758,1760,1762,1764,1766,1768,1771,1773,1775,1777,1779,1781,1783,1786,1789],{"class":362,"line":363},[360,1754,395],{"class":394},[360,1756,1757],{"class":398}," amount ",[360,1759,402],{"class":374},[360,1761,371],{"class":370},[360,1763,375],{"class":374},[360,1765,430],{"class":409},[360,1767,433],{"class":374},[360,1769,1770],{"class":409},"try_transform",[360,1772,1281],{"class":374},[360,1774,1377],{"class":398},[360,1776,1286],{"class":374},[360,1778,1675],{"class":398},[360,1780,452],{"class":374},[360,1782,455],{"class":409},[360,1784,1785],{"class":374},"::\u003C",[360,1787,1788],{"class":370},"u128",[360,1790,1791],{"class":374},">());\n",[360,1793,1794,1796,1798,1801,1803,1805,1807,1809,1811,1814,1816,1818,1820,1822,1824],{"class":362,"line":384},[360,1795,1061],{"class":409},[360,1797,412],{"class":374},[360,1799,1800],{"class":398},"amount",[360,1802,452],{"class":374},[360,1804,455],{"class":409},[360,1806,412],{"class":374},[360,1808,1003],{"class":463},[360,1810,1006],{"class":374},[360,1812,1813],{"class":463},"\"42\"",[360,1815,1012],{"class":374},[360,1817,469],{"class":374},[360,1819,472],{"class":409},[360,1821,423],{"class":374},[360,1823,513],{"class":366},[360,1825,1100],{"class":374},[360,1827,1828],{"class":362,"line":391},[360,1829,388],{"emptyLinePlaceholder":387},[360,1831,1832,1834,1836,1838,1841,1843,1845,1847,1849,1851,1854,1856,1858,1860],{"class":362,"line":442},[360,1833,395],{"class":394},[360,1835,1027],{"class":398},[360,1837,402],{"class":374},[360,1839,1840],{"class":398}," amount",[360,1842,452],{"class":374},[360,1844,455],{"class":409},[360,1846,412],{"class":374},[360,1848,1003],{"class":463},[360,1850,1006],{"class":374},[360,1852,1853],{"class":463},"\"12x\"",[360,1855,1012],{"class":374},[360,1857,469],{"class":374},[360,1859,1052],{"class":409},[360,1861,1055],{"class":374},[360,1863,1864,1866,1868,1870,1872,1874,1876,1878,1880,1882,1884,1886,1888,1890,1892,1894],{"class":362,"line":481},[360,1865,1061],{"class":409},[360,1867,412],{"class":374},[360,1869,1066],{"class":398},[360,1871,452],{"class":374},[360,1873,1071],{"class":398},[360,1875,1074],{"class":374},[360,1877,1077],{"class":366},[360,1879,1080],{"class":374},[360,1881,357],{"class":398},[360,1883,452],{"class":374},[360,1885,1087],{"class":409},[360,1887,423],{"class":374},[360,1889,1092],{"class":374},[360,1891,1626],{"class":463},[360,1893,460],{"class":374},[360,1895,1100],{"class":374},[360,1897,1898,1900,1902,1904,1906,1908,1910,1912,1914,1917,1919,1921,1924,1926],{"class":362,"line":519},[360,1899,1061],{"class":409},[360,1901,412],{"class":374},[360,1903,1066],{"class":398},[360,1905,452],{"class":374},[360,1907,1071],{"class":398},[360,1909,1074],{"class":374},[360,1911,1077],{"class":366},[360,1913,1080],{"class":374},[360,1915,1916],{"class":398},"message",[360,1918,510],{"class":374},[360,1920,1092],{"class":374},[360,1922,1923],{"class":463},"invalid digit found in string",[360,1925,460],{"class":374},[360,1927,1100],{"class":374},[346,1929,1930],{},"The inner schema runs first; the function only sees valid values. The JSON Schema is the inner schema's.",[341,1932,1934],{"id":1933},"pipe","Pipe",[346,1936,1937,1940,1941,1943,1944,1947],{},[357,1938,1939],{},"a.pipe(b)"," serializes the output of ",[357,1942,728],{}," back to JSON and parses it with ",[357,1945,1946],{},"b",". The second schema sees JSON, so a string output needs a coercing schema:",[350,1949,1951],{"className":352,"code":1950,"language":354,"meta":355,"style":355},"let qty = vld::string().trim().pipe(vld::number().coerce().min(0.0));\nassert_eq!(qty.parse(r#\"\" 5 \"\"#).unwrap(), 5.0);\n",[357,1952,1953,2004],{"__ignoreMap":355},[360,1954,1955,1957,1960,1962,1964,1966,1968,1970,1972,1974,1976,1978,1980,1982,1984,1986,1989,1991,1994,1996,1998,2000,2002],{"class":362,"line":363},[360,1956,395],{"class":394},[360,1958,1959],{"class":398}," qty ",[360,1961,402],{"class":374},[360,1963,371],{"class":370},[360,1965,375],{"class":374},[360,1967,430],{"class":409},[360,1969,433],{"class":374},[360,1971,1662],{"class":409},[360,1973,433],{"class":374},[360,1975,1933],{"class":409},[360,1977,412],{"class":374},[360,1979,415],{"class":370},[360,1981,375],{"class":374},[360,1983,855],{"class":409},[360,1985,433],{"class":374},[360,1987,1988],{"class":409},"coerce",[360,1990,433],{"class":374},[360,1992,1993],{"class":409},"min",[360,1995,412],{"class":374},[360,1997,1077],{"class":366},[360,1999,452],{"class":374},[360,2001,1077],{"class":366},[360,2003,1200],{"class":374},[360,2005,2006,2008,2010,2013,2015,2017,2019,2021,2023,2026,2028,2030,2032,2034,2037,2039,2041],{"class":362,"line":384},[360,2007,1061],{"class":409},[360,2009,412],{"class":374},[360,2011,2012],{"class":398},"qty",[360,2014,452],{"class":374},[360,2016,455],{"class":409},[360,2018,412],{"class":374},[360,2020,1003],{"class":463},[360,2022,1006],{"class":374},[360,2024,2025],{"class":463},"\" 5 \"",[360,2027,1012],{"class":374},[360,2029,469],{"class":374},[360,2031,472],{"class":409},[360,2033,423],{"class":374},[360,2035,2036],{"class":366}," 5",[360,2038,452],{"class":374},[360,2040,1077],{"class":366},[360,2042,1100],{"class":374},[341,2044,2046],{"id":2045},"preprocess","Preprocess",[346,2048,2049,2052],{},[357,2050,2051],{},"vld::preprocess(f, schema)"," rewrites the raw JSON value before validation:",[350,2054,2056],{"className":352,"code":2055,"language":354,"meta":355,"style":355},"let tags = vld::preprocess(\n    |v| match v.as_str() {\n        Some(s) => serde_json::json!(s.split(',').map(str::trim).collect::\u003CVec\u003C_>>()),\n        None => v.clone(),\n    },\n    vld::array(vld::string().min(1)),\n);\nassert_eq!(tags.parse(r#\"\"a, b\"\"#).unwrap(), vec![\"a\", \"b\"]);\n",[357,2057,2058,2076,2101,2172,2188,2193,2222,2226],{"__ignoreMap":355},[360,2059,2060,2062,2065,2067,2069,2071,2073],{"class":362,"line":363},[360,2061,395],{"class":394},[360,2063,2064],{"class":398}," tags ",[360,2066,402],{"class":374},[360,2068,371],{"class":370},[360,2070,375],{"class":374},[360,2072,2045],{"class":409},[360,2074,2075],{"class":374},"(\n",[360,2077,2078,2081,2084,2086,2089,2092,2094,2097,2099],{"class":362,"line":384},[360,2079,2080],{"class":374},"    |",[360,2082,2083],{"class":398},"v",[360,2085,1286],{"class":374},[360,2087,2088],{"class":445}," match",[360,2090,2091],{"class":398}," v",[360,2093,452],{"class":374},[360,2095,2096],{"class":409},"as_str",[360,2098,475],{"class":374},[360,2100,478],{"class":374},[360,2102,2103,2106,2108,2110,2112,2114,2117,2119,2122,2124,2126,2128,2131,2133,2136,2138,2140,2142,2145,2147,2150,2152,2154,2156,2159,2161,2164,2167,2169],{"class":362,"line":391},[360,2104,2105],{"class":370},"        Some",[360,2107,412],{"class":374},[360,2109,1377],{"class":398},[360,2111,497],{"class":374},[360,2113,500],{"class":374},[360,2115,2116],{"class":370}," serde_json",[360,2118,375],{"class":374},[360,2120,2121],{"class":409},"json!",[360,2123,412],{"class":374},[360,2125,1377],{"class":398},[360,2127,452],{"class":374},[360,2129,2130],{"class":409},"split",[360,2132,412],{"class":374},[360,2134,2135],{"class":374},"'",[360,2137,510],{"class":463},[360,2139,2135],{"class":374},[360,2141,469],{"class":374},[360,2143,2144],{"class":409},"map",[360,2146,412],{"class":374},[360,2148,2149],{"class":370},"str",[360,2151,375],{"class":374},[360,2153,1662],{"class":398},[360,2155,469],{"class":374},[360,2157,2158],{"class":409},"collect",[360,2160,1785],{"class":374},[360,2162,2163],{"class":370},"Vec",[360,2165,2166],{"class":374},"\u003C",[360,2168,531],{"class":398},[360,2170,2171],{"class":374},">>()),\n",[360,2173,2174,2177,2179,2181,2183,2186],{"class":362,"line":442},[360,2175,2176],{"class":370},"        None",[360,2178,500],{"class":374},[360,2180,2091],{"class":398},[360,2182,452],{"class":374},[360,2184,2185],{"class":409},"clone",[360,2187,541],{"class":374},[360,2189,2190],{"class":362,"line":481},[360,2191,2192],{"class":374},"    },\n",[360,2194,2195,2198,2200,2203,2205,2207,2209,2211,2213,2215,2217,2219],{"class":362,"line":519},[360,2196,2197],{"class":370},"    vld",[360,2199,375],{"class":374},[360,2201,2202],{"class":409},"array",[360,2204,412],{"class":374},[360,2206,415],{"class":370},[360,2208,375],{"class":374},[360,2210,430],{"class":409},[360,2212,433],{"class":374},[360,2214,1993],{"class":409},[360,2216,412],{"class":374},[360,2218,1109],{"class":366},[360,2220,2221],{"class":374},")),\n",[360,2223,2224],{"class":362,"line":544},[360,2225,1100],{"class":374},[360,2227,2228,2230,2232,2235,2237,2239,2241,2243,2245,2248,2250,2252,2254,2256,2259,2261,2263,2265,2267,2269,2271,2273,2275],{"class":362,"line":550},[360,2229,1061],{"class":409},[360,2231,412],{"class":374},[360,2233,2234],{"class":398},"tags",[360,2236,452],{"class":374},[360,2238,455],{"class":409},[360,2240,412],{"class":374},[360,2242,1003],{"class":463},[360,2244,1006],{"class":374},[360,2246,2247],{"class":463},"\"a, b\"",[360,2249,1012],{"class":374},[360,2251,469],{"class":374},[360,2253,472],{"class":409},[360,2255,423],{"class":374},[360,2257,2258],{"class":409}," vec!",[360,2260,1074],{"class":374},[360,2262,460],{"class":374},[360,2264,728],{"class":463},[360,2266,460],{"class":374},[360,2268,510],{"class":374},[360,2270,1092],{"class":374},[360,2272,1946],{"class":463},[360,2274,460],{"class":374},[360,2276,2277],{"class":374},"]);\n",[341,2279,1446],{"id":2280},"custom",[346,2282,2283,2286,2287,2289],{},[357,2284,2285],{},"vld::custom(|value| -> Result\u003CT, String>)"," builds a schema from a function. Errors become a ",[357,2288,2280],{}," issue with your message.",[350,2291,2293],{"className":352,"code":2292,"language":354,"meta":355,"style":355},"let even = vld::custom(|v: &serde_json::Value| {\n    let n = v.as_i64().ok_or(\"Expected integer\")?;\n    if n % 2 == 0 { Ok(n) } else { Err(\"Must be even\".into()) }\n});\nassert!(even.parse(\"4\").is_ok());\n",[357,2294,2295,2330,2363,2416,2420],{"__ignoreMap":355},[360,2296,2297,2299,2301,2303,2305,2307,2309,2311,2313,2315,2318,2321,2323,2326,2328],{"class":362,"line":363},[360,2298,395],{"class":394},[360,2300,1260],{"class":398},[360,2302,402],{"class":374},[360,2304,371],{"class":370},[360,2306,375],{"class":374},[360,2308,2280],{"class":409},[360,2310,1281],{"class":374},[360,2312,2083],{"class":398},[360,2314,1455],{"class":374},[360,2316,2317],{"class":374}," &",[360,2319,2320],{"class":370},"serde_json",[360,2322,375],{"class":374},[360,2324,2325],{"class":370},"Value",[360,2327,1286],{"class":374},[360,2329,478],{"class":374},[360,2331,2332,2335,2337,2339,2341,2343,2346,2348,2351,2353,2355,2358,2360],{"class":362,"line":384},[360,2333,2334],{"class":394},"    let",[360,2336,1289],{"class":398},[360,2338,402],{"class":374},[360,2340,2091],{"class":398},[360,2342,452],{"class":374},[360,2344,2345],{"class":409},"as_i64",[360,2347,433],{"class":374},[360,2349,2350],{"class":409},"ok_or",[360,2352,412],{"class":374},[360,2354,460],{"class":374},[360,2356,2357],{"class":463},"Expected integer",[360,2359,460],{"class":374},[360,2361,2362],{"class":374},")?;\n",[360,2364,2365,2367,2369,2371,2373,2375,2377,2379,2382,2384,2386,2388,2391,2394,2396,2399,2401,2403,2405,2407,2409,2411,2413],{"class":362,"line":391},[360,2366,1391],{"class":445},[360,2368,1289],{"class":398},[360,2370,1292],{"class":374},[360,2372,1295],{"class":366},[360,2374,1298],{"class":374},[360,2376,1301],{"class":366},[360,2378,1449],{"class":374},[360,2380,2381],{"class":370}," Ok",[360,2383,412],{"class":374},[360,2385,494],{"class":398},[360,2387,497],{"class":374},[360,2389,2390],{"class":374}," }",[360,2392,2393],{"class":445}," else",[360,2395,1449],{"class":374},[360,2397,2398],{"class":370}," Err",[360,2400,412],{"class":374},[360,2402,460],{"class":374},[360,2404,1308],{"class":463},[360,2406,460],{"class":374},[360,2408,452],{"class":374},[360,2410,1467],{"class":409},[360,2412,1424],{"class":374},[360,2414,2415],{"class":374}," }\n",[360,2417,2418],{"class":362,"line":442},[360,2419,1574],{"class":374},[360,2421,2422,2424,2426,2428,2430,2432,2434,2436,2439,2441,2443,2445],{"class":362,"line":481},[360,2423,989],{"class":409},[360,2425,412],{"class":374},[360,2427,1321],{"class":398},[360,2429,452],{"class":374},[360,2431,455],{"class":409},[360,2433,412],{"class":374},[360,2435,460],{"class":374},[360,2437,2438],{"class":463},"4",[360,2440,460],{"class":374},[360,2442,469],{"class":374},[360,2444,1017],{"class":409},[360,2446,439],{"class":374},[341,2448,2450],{"id":2449},"lazy-recursive-schemas","Lazy (recursive schemas)",[346,2452,2453,2456],{},[357,2454,2455],{},"vld::lazy(factory)"," calls the factory on first use and caches the result, so a schema can refer to itself:",[350,2458,2460],{"className":352,"code":2459,"language":354,"meta":355,"style":355},"fn tree() -> ZObject {\n    vld::object()\n        .field(\"value\", vld::number().int())\n        .field(\"children\", vld::array(vld::lazy(tree)).with_default(vec![]))\n}\n\nassert!(tree().parse(r#\"{\"value\": 1, \"children\": [{\"value\": 2}]}\"#).is_ok());\n",[357,2461,2462,2480,2490,2519,2570,2574,2578],{"__ignoreMap":355},[360,2463,2464,2467,2470,2472,2475,2478],{"class":362,"line":363},[360,2465,2466],{"class":366},"fn",[360,2468,2469],{"class":409}," tree",[360,2471,475],{"class":374},[360,2473,2474],{"class":374}," ->",[360,2476,2477],{"class":370}," ZObject",[360,2479,478],{"class":374},[360,2481,2482,2484,2486,2488],{"class":362,"line":384},[360,2483,2197],{"class":370},[360,2485,375],{"class":374},[360,2487,792],{"class":409},[360,2489,795],{"class":374},[360,2491,2492,2494,2496,2498,2500,2503,2505,2507,2509,2511,2513,2515,2517],{"class":362,"line":391},[360,2493,800],{"class":374},[360,2495,803],{"class":409},[360,2497,412],{"class":374},[360,2499,460],{"class":374},[360,2501,2502],{"class":463},"value",[360,2504,460],{"class":374},[360,2506,510],{"class":374},[360,2508,371],{"class":370},[360,2510,375],{"class":374},[360,2512,855],{"class":409},[360,2514,433],{"class":374},[360,2516,1273],{"class":409},[360,2518,950],{"class":374},[360,2520,2521,2523,2525,2527,2529,2532,2534,2536,2538,2540,2542,2544,2546,2548,2551,2553,2556,2559,2562,2564,2567],{"class":362,"line":442},[360,2522,800],{"class":374},[360,2524,803],{"class":409},[360,2526,412],{"class":374},[360,2528,460],{"class":374},[360,2530,2531],{"class":463},"children",[360,2533,460],{"class":374},[360,2535,510],{"class":374},[360,2537,371],{"class":370},[360,2539,375],{"class":374},[360,2541,2202],{"class":409},[360,2543,412],{"class":374},[360,2545,415],{"class":370},[360,2547,375],{"class":374},[360,2549,2550],{"class":409},"lazy",[360,2552,412],{"class":374},[360,2554,2555],{"class":398},"tree",[360,2557,2558],{"class":374},")).",[360,2560,2561],{"class":409},"with_default",[360,2563,412],{"class":374},[360,2565,2566],{"class":409},"vec!",[360,2568,2569],{"class":374},"[]))\n",[360,2571,2572],{"class":362,"line":481},[360,2573,547],{"class":374},[360,2575,2576],{"class":362,"line":519},[360,2577,388],{"emptyLinePlaceholder":387},[360,2579,2580,2582,2584,2586,2588,2590,2592,2594,2596,2599,2601,2603,2605],{"class":362,"line":544},[360,2581,989],{"class":409},[360,2583,412],{"class":374},[360,2585,2555],{"class":409},[360,2587,433],{"class":374},[360,2589,455],{"class":409},[360,2591,412],{"class":374},[360,2593,1003],{"class":463},[360,2595,1006],{"class":374},[360,2597,2598],{"class":463},"{\"value\": 1, \"children\": [{\"value\": 2}]}",[360,2600,1012],{"class":374},[360,2602,469],{"class":374},[360,2604,1017],{"class":409},[360,2606,439],{"class":374},[346,2608,2609],{},"A recursive schema unfolds only as deep as the input goes.",[341,2611,2613],{"id":2612},"describe-and-message","describe and message",[2615,2616,2617,2628],"ul",{},[2618,2619,2620,2623,2624,2627],"li",{},[357,2621,2622],{},"describe(\"text\")"," attaches a description. It does not affect validation and becomes ",[357,2625,2626],{},"description"," in JSON Schema.",[2618,2629,2630,2633,2634,2637,2638,452],{},[357,2631,2632],{},"message(\"text\")"," replaces the message of ",[1142,2635,2636],{},"every"," issue the inner schema produces (codes, paths and received values are kept), like Zod's ",[357,2639,2640],{},".message()",[350,2642,2644],{"className":352,"code":2643,"language":354,"meta":355,"style":355},"let name = vld::string().min(3).describe(\"Display name\").message(\"Name is too short\");\nassert_eq!(name.parse(r#\"\"ab\"\"#).unwrap_err().issues[0].message, \"Name is too short\");\n",[357,2645,2646,2698],{"__ignoreMap":355},[360,2647,2648,2650,2653,2655,2657,2659,2661,2663,2665,2667,2669,2671,2674,2676,2678,2681,2683,2685,2687,2689,2691,2694,2696],{"class":362,"line":363},[360,2649,395],{"class":394},[360,2651,2652],{"class":398}," name ",[360,2654,402],{"class":374},[360,2656,371],{"class":370},[360,2658,375],{"class":374},[360,2660,430],{"class":409},[360,2662,433],{"class":374},[360,2664,1993],{"class":409},[360,2666,412],{"class":374},[360,2668,1332],{"class":366},[360,2670,469],{"class":374},[360,2672,2673],{"class":409},"describe",[360,2675,412],{"class":374},[360,2677,460],{"class":374},[360,2679,2680],{"class":463},"Display name",[360,2682,460],{"class":374},[360,2684,469],{"class":374},[360,2686,1916],{"class":409},[360,2688,412],{"class":374},[360,2690,460],{"class":374},[360,2692,2693],{"class":463},"Name is too short",[360,2695,460],{"class":374},[360,2697,1100],{"class":374},[360,2699,2700,2702,2704,2707,2709,2711,2713,2715,2717,2720,2722,2724,2726,2728,2730,2732,2734,2736,2738,2740,2742,2744,2746],{"class":362,"line":384},[360,2701,1061],{"class":409},[360,2703,412],{"class":374},[360,2705,2706],{"class":398},"name",[360,2708,452],{"class":374},[360,2710,455],{"class":409},[360,2712,412],{"class":374},[360,2714,1003],{"class":463},[360,2716,1006],{"class":374},[360,2718,2719],{"class":463},"\"ab\"",[360,2721,1012],{"class":374},[360,2723,469],{"class":374},[360,2725,1052],{"class":409},[360,2727,433],{"class":374},[360,2729,1071],{"class":398},[360,2731,1074],{"class":374},[360,2733,1077],{"class":366},[360,2735,1080],{"class":374},[360,2737,1916],{"class":398},[360,2739,510],{"class":374},[360,2741,1092],{"class":374},[360,2743,2693],{"class":463},[360,2745,460],{"class":374},[360,2747,1100],{"class":374},[2749,2750,2751],"style",{},"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 .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}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}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .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);}",{"title":355,"searchDepth":384,"depth":391,"links":2753},[2754,2755,2756,2757,2758,2759,2760,2761,2762,2763],{"id":343,"depth":384,"text":344},{"id":715,"depth":384,"text":716},{"id":1130,"depth":384,"text":1131},{"id":1233,"depth":384,"text":1234},{"id":1626,"depth":384,"text":1627},{"id":1933,"depth":384,"text":1934},{"id":2045,"depth":384,"text":2046},{"id":2280,"depth":384,"text":1446},{"id":2449,"depth":384,"text":2450},{"id":2612,"depth":384,"text":2613},"Unions, intersections, discriminated unions, refinements, transforms, pipes, preprocessing, lazy and custom schemas.","md",null,{},{"title":66,"description":2764},"Ow6MyAj8toxvW3PH-WU-pNdXNPBWvOexcp-EnNZ_rQQ",[2771,2773],{"title":62,"path":63,"stem":64,"description":2772,"children":-1},"optional, nullable, nullish, with_default and catch.",{"title":70,"path":71,"stem":72,"description":2774,"children":-1},"from_serde, from_str, bytes, decimal, IP networks, socket addresses, paths, files, durations, raw JSON and nested schemas.",1794036359364]