[{"data":1,"prerenderedAt":1966},["ShallowReactive",2],{"navigation":3,"\u002Fgetting-started\u002Fquick-start":335,"\u002Fgetting-started\u002Fquick-start-surround":1961},[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":19,"body":337,"description":1955,"extension":1956,"links":1957,"meta":1958,"navigation":399,"path":20,"seo":1959,"stem":21,"__hash__":1960},"docs\u002F1.getting-started\u002F3.quick-start.md",{"type":338,"value":339,"toc":1948},"minimark",[340,345,362,593,597,616,1136,1149,1153,1164,1361,1396,1400,1406,1511,1895,1913,1917,1944],[341,342,344],"h2",{"id":343},"_1-parse-a-single-value","1. Parse a single value",[346,347,348,349,353,354,357,358,361],"p",{},"Every schema implements the ",[350,351,352],"code",{},"VldSchema"," trait. ",[350,355,356],{},"parse()"," accepts a JSON string, bytes, a file path or a ",[350,359,360],{},"serde_json::Value",".",[363,364,369],"pre",{"className":365,"code":366,"language":367,"meta":368,"style":368},"language-rust shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","use vld::prelude::*;\n\nlet email = vld::string().trim().email();\n\nassert_eq!(email.parse(r#\"\" ada@example.com \"\"#).unwrap(), \"ada@example.com\");\nassert!(email.parse(r#\"\"not-an-email\"\"#).is_err());\n\n\u002F\u002F From an existing serde_json::Value (borrowed, not cloned):\nlet value = serde_json::json!(\"ada@example.com\");\nassert!(email.parse(&value).is_ok());\n","rust","",[350,370,371,394,401,437,442,494,527,532,539,567],{"__ignoreMap":368},[372,373,376,380,384,388,391],"span",{"class":374,"line":375},"line",1,[372,377,379],{"class":378},"sbssI","use",[372,381,383],{"class":382},"sBMFI"," vld",[372,385,387],{"class":386},"sMK4o","::",[372,389,390],{"class":382},"prelude",[372,392,393],{"class":386},"::*;\n",[372,395,397],{"class":374,"line":396},2,[372,398,400],{"emptyLinePlaceholder":399},true,"\n",[372,402,404,408,412,415,417,419,423,426,429,431,434],{"class":374,"line":403},3,[372,405,407],{"class":406},"spNyl","let",[372,409,411],{"class":410},"sTEyZ"," email ",[372,413,414],{"class":386},"=",[372,416,383],{"class":382},[372,418,387],{"class":386},[372,420,422],{"class":421},"s2Zo4","string",[372,424,425],{"class":386},"().",[372,427,428],{"class":421},"trim",[372,430,425],{"class":386},[372,432,433],{"class":421},"email",[372,435,436],{"class":386},"();\n",[372,438,440],{"class":374,"line":439},4,[372,441,400],{"emptyLinePlaceholder":399},[372,443,445,448,451,453,455,458,460,464,467,470,473,476,479,482,485,488,491],{"class":374,"line":444},5,[372,446,447],{"class":421},"assert_eq!",[372,449,450],{"class":386},"(",[372,452,433],{"class":410},[372,454,361],{"class":386},[372,456,457],{"class":421},"parse",[372,459,450],{"class":386},[372,461,463],{"class":462},"sfazB","r",[372,465,466],{"class":386},"#\"",[372,468,469],{"class":462},"\" ada@example.com \"",[372,471,472],{"class":386},"\"#",[372,474,475],{"class":386},").",[372,477,478],{"class":421},"unwrap",[372,480,481],{"class":386},"(),",[372,483,484],{"class":386}," \"",[372,486,487],{"class":462},"ada@example.com",[372,489,490],{"class":386},"\"",[372,492,493],{"class":386},");\n",[372,495,497,500,502,504,506,508,510,512,514,517,519,521,524],{"class":374,"line":496},6,[372,498,499],{"class":421},"assert!",[372,501,450],{"class":386},[372,503,433],{"class":410},[372,505,361],{"class":386},[372,507,457],{"class":421},[372,509,450],{"class":386},[372,511,463],{"class":462},[372,513,466],{"class":386},[372,515,516],{"class":462},"\"not-an-email\"",[372,518,472],{"class":386},[372,520,475],{"class":386},[372,522,523],{"class":421},"is_err",[372,525,526],{"class":386},"());\n",[372,528,530],{"class":374,"line":529},7,[372,531,400],{"emptyLinePlaceholder":399},[372,533,535],{"class":374,"line":534},8,[372,536,538],{"class":537},"sHwdD","\u002F\u002F From an existing serde_json::Value (borrowed, not cloned):\n",[372,540,542,544,547,549,552,554,557,559,561,563,565],{"class":374,"line":541},9,[372,543,407],{"class":406},[372,545,546],{"class":410}," value ",[372,548,414],{"class":386},[372,550,551],{"class":382}," serde_json",[372,553,387],{"class":386},[372,555,556],{"class":421},"json!",[372,558,450],{"class":386},[372,560,490],{"class":386},[372,562,487],{"class":462},[372,564,490],{"class":386},[372,566,493],{"class":386},[372,568,570,572,574,576,578,580,583,586,588,591],{"class":374,"line":569},10,[372,571,499],{"class":421},[372,573,450],{"class":386},[372,575,433],{"class":410},[372,577,361],{"class":386},[372,579,457],{"class":421},[372,581,582],{"class":386},"(&",[372,584,585],{"class":410},"value",[372,587,475],{"class":386},[372,589,590],{"class":421},"is_ok",[372,592,526],{"class":386},[341,594,596],{"id":595},"_2-describe-a-struct","2. Describe a struct",[346,598,599,602,603,605,606,605,609,612,613,361],{},[350,600,601],{},"vld::schema!"," declares a struct and the schema of every field. It generates ",[350,604,356],{},", ",[350,607,608],{},"parse_value()",[350,610,611],{},"validate()"," and ",[350,614,615],{},"is_valid()",[363,617,619],{"className":365,"code":618,"language":367,"meta":368,"style":368},"use vld::prelude::*;\n\nvld::schema! {\n    #[derive(Debug, Clone)]\n    pub struct Address {\n        pub city: String => vld::string().min(1),\n        pub zip: String => vld::string().len(5),\n    }\n}\n\nvld::schema! {\n    #[derive(Debug)]\n    pub struct User {\n        pub name: String => vld::string().min(2).max(50),\n        pub email: String => vld::string().email(),\n        pub age: Option\u003Ci64> => vld::number().int().gte(18).optional(),\n        pub tags: Vec\u003CString> => vld::array(vld::string()).max_len(5).with_default(vec![]),\n        pub address: Address => vld::nested(Address::parse_value),\n    }\n}\n\nlet user = User::parse(r#\"{\n    \"name\": \"Ada\",\n    \"email\": \"ada@example.com\",\n    \"address\": {\"city\": \"London\", \"zip\": \"12345\"}\n}\"#).unwrap();\n\nassert_eq!(user.age, None);\nassert!(user.tags.is_empty());\n",[350,620,621,633,637,650,672,685,721,752,757,762,766,777,790,802,843,870,923,983,1016,1021,1026,1031,1056,1062,1068,1074,1088,1093,1115],{"__ignoreMap":368},[372,622,623,625,627,629,631],{"class":374,"line":375},[372,624,379],{"class":378},[372,626,383],{"class":382},[372,628,387],{"class":386},[372,630,390],{"class":382},[372,632,393],{"class":386},[372,634,635],{"class":374,"line":396},[372,636,400],{"emptyLinePlaceholder":399},[372,638,639,642,644,647],{"class":374,"line":403},[372,640,641],{"class":382},"vld",[372,643,387],{"class":386},[372,645,646],{"class":421},"schema!",[372,648,649],{"class":386}," {\n",[372,651,652,655,658,660,663,666,669],{"class":374,"line":439},[372,653,654],{"class":386},"    #[",[372,656,657],{"class":410},"derive",[372,659,450],{"class":386},[372,661,662],{"class":382},"Debug",[372,664,665],{"class":386},",",[372,667,668],{"class":382}," Clone",[372,670,671],{"class":386},")]\n",[372,673,674,677,680,683],{"class":374,"line":444},[372,675,676],{"class":406},"    pub",[372,678,679],{"class":406}," struct",[372,681,682],{"class":382}," Address",[372,684,649],{"class":386},[372,686,687,690,693,696,699,702,704,706,708,710,713,715,718],{"class":374,"line":496},[372,688,689],{"class":406},"        pub",[372,691,692],{"class":410}," city",[372,694,695],{"class":386},":",[372,697,698],{"class":382}," String",[372,700,701],{"class":386}," =>",[372,703,383],{"class":382},[372,705,387],{"class":386},[372,707,422],{"class":421},[372,709,425],{"class":386},[372,711,712],{"class":421},"min",[372,714,450],{"class":386},[372,716,717],{"class":378},"1",[372,719,720],{"class":386},"),\n",[372,722,723,725,728,730,732,734,736,738,740,742,745,747,750],{"class":374,"line":529},[372,724,689],{"class":406},[372,726,727],{"class":410}," zip",[372,729,695],{"class":386},[372,731,698],{"class":382},[372,733,701],{"class":386},[372,735,383],{"class":382},[372,737,387],{"class":386},[372,739,422],{"class":421},[372,741,425],{"class":386},[372,743,744],{"class":421},"len",[372,746,450],{"class":386},[372,748,749],{"class":378},"5",[372,751,720],{"class":386},[372,753,754],{"class":374,"line":534},[372,755,756],{"class":386},"    }\n",[372,758,759],{"class":374,"line":541},[372,760,761],{"class":386},"}\n",[372,763,764],{"class":374,"line":569},[372,765,400],{"emptyLinePlaceholder":399},[372,767,769,771,773,775],{"class":374,"line":768},11,[372,770,641],{"class":382},[372,772,387],{"class":386},[372,774,646],{"class":421},[372,776,649],{"class":386},[372,778,780,782,784,786,788],{"class":374,"line":779},12,[372,781,654],{"class":386},[372,783,657],{"class":410},[372,785,450],{"class":386},[372,787,662],{"class":382},[372,789,671],{"class":386},[372,791,793,795,797,800],{"class":374,"line":792},13,[372,794,676],{"class":406},[372,796,679],{"class":406},[372,798,799],{"class":382}," User",[372,801,649],{"class":386},[372,803,805,807,810,812,814,816,818,820,822,824,826,828,831,833,836,838,841],{"class":374,"line":804},14,[372,806,689],{"class":406},[372,808,809],{"class":410}," name",[372,811,695],{"class":386},[372,813,698],{"class":382},[372,815,701],{"class":386},[372,817,383],{"class":382},[372,819,387],{"class":386},[372,821,422],{"class":421},[372,823,425],{"class":386},[372,825,712],{"class":421},[372,827,450],{"class":386},[372,829,830],{"class":378},"2",[372,832,475],{"class":386},[372,834,835],{"class":421},"max",[372,837,450],{"class":386},[372,839,840],{"class":378},"50",[372,842,720],{"class":386},[372,844,846,848,851,853,855,857,859,861,863,865,867],{"class":374,"line":845},15,[372,847,689],{"class":406},[372,849,850],{"class":410}," email",[372,852,695],{"class":386},[372,854,698],{"class":382},[372,856,701],{"class":386},[372,858,383],{"class":382},[372,860,387],{"class":386},[372,862,422],{"class":421},[372,864,425],{"class":386},[372,866,433],{"class":421},[372,868,869],{"class":386},"(),\n",[372,871,873,875,878,880,883,886,889,892,894,896,898,901,903,906,908,911,913,916,918,921],{"class":374,"line":872},16,[372,874,689],{"class":406},[372,876,877],{"class":410}," age",[372,879,695],{"class":386},[372,881,882],{"class":382}," Option",[372,884,885],{"class":386},"\u003C",[372,887,888],{"class":382},"i64",[372,890,891],{"class":386},">",[372,893,701],{"class":386},[372,895,383],{"class":382},[372,897,387],{"class":386},[372,899,900],{"class":421},"number",[372,902,425],{"class":386},[372,904,905],{"class":421},"int",[372,907,425],{"class":386},[372,909,910],{"class":421},"gte",[372,912,450],{"class":386},[372,914,915],{"class":378},"18",[372,917,475],{"class":386},[372,919,920],{"class":421},"optional",[372,922,869],{"class":386},[372,924,926,928,931,933,936,938,941,943,945,947,949,952,954,956,958,960,963,966,968,970,972,975,977,980],{"class":374,"line":925},17,[372,927,689],{"class":406},[372,929,930],{"class":410}," tags",[372,932,695],{"class":386},[372,934,935],{"class":382}," Vec",[372,937,885],{"class":386},[372,939,940],{"class":382},"String",[372,942,891],{"class":386},[372,944,701],{"class":386},[372,946,383],{"class":382},[372,948,387],{"class":386},[372,950,951],{"class":421},"array",[372,953,450],{"class":386},[372,955,641],{"class":382},[372,957,387],{"class":386},[372,959,422],{"class":421},[372,961,962],{"class":386},"()).",[372,964,965],{"class":421},"max_len",[372,967,450],{"class":386},[372,969,749],{"class":378},[372,971,475],{"class":386},[372,973,974],{"class":421},"with_default",[372,976,450],{"class":386},[372,978,979],{"class":421},"vec!",[372,981,982],{"class":386},"[]),\n",[372,984,986,988,991,993,995,997,999,1001,1004,1006,1009,1011,1014],{"class":374,"line":985},18,[372,987,689],{"class":406},[372,989,990],{"class":410}," address",[372,992,695],{"class":386},[372,994,682],{"class":382},[372,996,701],{"class":386},[372,998,383],{"class":382},[372,1000,387],{"class":386},[372,1002,1003],{"class":421},"nested",[372,1005,450],{"class":386},[372,1007,1008],{"class":382},"Address",[372,1010,387],{"class":386},[372,1012,1013],{"class":410},"parse_value",[372,1015,720],{"class":386},[372,1017,1019],{"class":374,"line":1018},19,[372,1020,756],{"class":386},[372,1022,1024],{"class":374,"line":1023},20,[372,1025,761],{"class":386},[372,1027,1029],{"class":374,"line":1028},21,[372,1030,400],{"emptyLinePlaceholder":399},[372,1032,1034,1036,1039,1041,1043,1045,1047,1049,1051,1053],{"class":374,"line":1033},22,[372,1035,407],{"class":406},[372,1037,1038],{"class":410}," user ",[372,1040,414],{"class":386},[372,1042,799],{"class":382},[372,1044,387],{"class":386},[372,1046,457],{"class":421},[372,1048,450],{"class":386},[372,1050,463],{"class":462},[372,1052,466],{"class":386},[372,1054,1055],{"class":462},"{\n",[372,1057,1059],{"class":374,"line":1058},23,[372,1060,1061],{"class":462},"    \"name\": \"Ada\",\n",[372,1063,1065],{"class":374,"line":1064},24,[372,1066,1067],{"class":462},"    \"email\": \"ada@example.com\",\n",[372,1069,1071],{"class":374,"line":1070},25,[372,1072,1073],{"class":462},"    \"address\": {\"city\": \"London\", \"zip\": \"12345\"}\n",[372,1075,1077,1080,1082,1084,1086],{"class":374,"line":1076},26,[372,1078,1079],{"class":462},"}",[372,1081,472],{"class":386},[372,1083,475],{"class":386},[372,1085,478],{"class":421},[372,1087,436],{"class":386},[372,1089,1091],{"class":374,"line":1090},27,[372,1092,400],{"emptyLinePlaceholder":399},[372,1094,1096,1098,1100,1103,1105,1108,1110,1113],{"class":374,"line":1095},28,[372,1097,447],{"class":421},[372,1099,450],{"class":386},[372,1101,1102],{"class":410},"user",[372,1104,361],{"class":386},[372,1106,1107],{"class":410},"age",[372,1109,665],{"class":386},[372,1111,1112],{"class":382}," None",[372,1114,493],{"class":386},[372,1116,1118,1120,1122,1124,1126,1129,1131,1134],{"class":374,"line":1117},29,[372,1119,499],{"class":421},[372,1121,450],{"class":386},[372,1123,1102],{"class":410},[372,1125,361],{"class":386},[372,1127,1128],{"class":410},"tags",[372,1130,361],{"class":386},[372,1132,1133],{"class":421},"is_empty",[372,1135,526],{"class":386},[346,1137,1138,1139,1141,1142,1144,1145,361],{},"Prefer attributes? The same struct with ",[350,1140,84],{}," (feature ",[350,1143,657],{},") is shown in ",[1146,1147,1148],"a",{"href":85},"Derive",[341,1150,1152],{"id":1151},"_3-read-the-errors","3. Read the errors",[346,1154,1155,1156,1159,1160,1163],{},"Parsing never stops at the first problem. ",[350,1157,1158],{},"VldError"," holds a list of ",[350,1161,1162],{},"ValidationIssue","s with a typed code, a message and a path.",[363,1165,1167],{"className":365,"code":1166,"language":367,"meta":368,"style":368},"let err = User::parse(r#\"{\"name\": \"A\", \"email\": \"nope\", \"address\": {\"city\": \"\"}}\"#).unwrap_err();\n\nfor issue in &err.issues {\n    let path: String = issue.path.iter().map(|p| p.to_string()).collect();\n    println!(\"{path}: [{}] {}\", issue.code.key(), issue.message);\n}\n\u002F\u002F .name: [too_small] String must be at least 2 characters\n\u002F\u002F .email: [invalid_string] Invalid email address\n\u002F\u002F .address.city: [too_small] String must be at least 1 character\n\u002F\u002F .address.zip: [missing_field] Required field is missing\n",[350,1168,1169,1202,1206,1231,1287,1337,1341,1346,1351,1356],{"__ignoreMap":368},[372,1170,1171,1173,1176,1178,1180,1182,1184,1186,1188,1190,1193,1195,1197,1200],{"class":374,"line":375},[372,1172,407],{"class":406},[372,1174,1175],{"class":410}," err ",[372,1177,414],{"class":386},[372,1179,799],{"class":382},[372,1181,387],{"class":386},[372,1183,457],{"class":421},[372,1185,450],{"class":386},[372,1187,463],{"class":462},[372,1189,466],{"class":386},[372,1191,1192],{"class":462},"{\"name\": \"A\", \"email\": \"nope\", \"address\": {\"city\": \"\"}}",[372,1194,472],{"class":386},[372,1196,475],{"class":386},[372,1198,1199],{"class":421},"unwrap_err",[372,1201,436],{"class":386},[372,1203,1204],{"class":374,"line":396},[372,1205,400],{"emptyLinePlaceholder":399},[372,1207,1208,1212,1215,1218,1221,1224,1226,1229],{"class":374,"line":403},[372,1209,1211],{"class":1210},"s7zQu","for",[372,1213,1214],{"class":410}," issue ",[372,1216,1217],{"class":378},"in",[372,1219,1220],{"class":386}," &",[372,1222,1223],{"class":410},"err",[372,1225,361],{"class":386},[372,1227,1228],{"class":410},"issues ",[372,1230,1055],{"class":386},[372,1232,1233,1236,1239,1241,1243,1246,1249,1251,1254,1256,1259,1261,1264,1267,1269,1272,1275,1277,1280,1282,1285],{"class":374,"line":439},[372,1234,1235],{"class":406},"    let",[372,1237,1238],{"class":410}," path",[372,1240,695],{"class":386},[372,1242,698],{"class":382},[372,1244,1245],{"class":386}," =",[372,1247,1248],{"class":410}," issue",[372,1250,361],{"class":386},[372,1252,1253],{"class":410},"path",[372,1255,361],{"class":386},[372,1257,1258],{"class":421},"iter",[372,1260,425],{"class":386},[372,1262,1263],{"class":421},"map",[372,1265,1266],{"class":386},"(|",[372,1268,346],{"class":410},[372,1270,1271],{"class":386},"|",[372,1273,1274],{"class":410}," p",[372,1276,361],{"class":386},[372,1278,1279],{"class":421},"to_string",[372,1281,962],{"class":386},[372,1283,1284],{"class":421},"collect",[372,1286,436],{"class":386},[372,1288,1289,1292,1294,1297,1299,1301,1304,1307,1310,1313,1315,1317,1319,1321,1323,1326,1328,1330,1332,1335],{"class":374,"line":444},[372,1290,1291],{"class":421},"    println!",[372,1293,450],{"class":386},[372,1295,1296],{"class":386},"\"{",[372,1298,1253],{"class":462},[372,1300,1079],{"class":386},[372,1302,1303],{"class":462},": [",[372,1305,1306],{"class":386},"{}",[372,1308,1309],{"class":462},"] ",[372,1311,1312],{"class":386},"{}\"",[372,1314,665],{"class":386},[372,1316,1248],{"class":410},[372,1318,361],{"class":386},[372,1320,350],{"class":410},[372,1322,361],{"class":386},[372,1324,1325],{"class":421},"key",[372,1327,481],{"class":386},[372,1329,1248],{"class":410},[372,1331,361],{"class":386},[372,1333,1334],{"class":410},"message",[372,1336,493],{"class":386},[372,1338,1339],{"class":374,"line":496},[372,1340,761],{"class":386},[372,1342,1343],{"class":374,"line":529},[372,1344,1345],{"class":537},"\u002F\u002F .name: [too_small] String must be at least 2 characters\n",[372,1347,1348],{"class":374,"line":534},[372,1349,1350],{"class":537},"\u002F\u002F .email: [invalid_string] Invalid email address\n",[372,1352,1353],{"class":374,"line":541},[372,1354,1355],{"class":537},"\u002F\u002F .address.city: [too_small] String must be at least 1 character\n",[372,1357,1358],{"class":374,"line":569},[372,1359,1360],{"class":537},"\u002F\u002F .address.zip: [missing_field] Required field is missing\n",[346,1362,1363,1365,1366,612,1369,1372,1373,1376,1377,612,1380,1383,1384,361],{},[350,1364,1158],{}," implements ",[350,1367,1368],{},"Display",[350,1370,1371],{},"std::error::Error",", so ",[350,1374,1375],{},"?"," works with ",[350,1378,1379],{},"anyhow",[350,1381,1382],{},"Box\u003Cdyn Error>",". For forms and APIs use ",[1146,1385,1386,605,1389,1392,1393],{"href":111},[350,1387,1388],{},"flatten_error",[350,1390,1391],{},"treeify_error"," or ",[350,1394,1395],{},"prettify_error",[341,1397,1399],{"id":1398},"_4-use-it-in-a-handler","4. Use it in a handler",[346,1401,1402,1403,1405],{},"Integration crates turn any ",[350,1404,646],{}," \u002F derive type into an extractor. With Axum:",[363,1407,1412],{"className":1408,"code":1409,"filename":1410,"language":1411,"meta":368,"style":368},"language-toml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","[dependencies]\nvld = \"0.5\"\nvld-axum = \"0.5\"\naxum = \"0.8\"\ntokio = { version = \"1\", features = [\"full\"] }\n","Cargo.toml","toml",[350,1413,1414,1425,1440,1453,1467],{"__ignoreMap":368},[372,1415,1416,1419,1422],{"class":374,"line":375},[372,1417,1418],{"class":386},"[",[372,1420,1421],{"class":382},"dependencies",[372,1423,1424],{"class":386},"]\n",[372,1426,1427,1430,1432,1434,1437],{"class":374,"line":396},[372,1428,1429],{"class":410},"vld ",[372,1431,414],{"class":386},[372,1433,484],{"class":386},[372,1435,1436],{"class":462},"0.5",[372,1438,1439],{"class":386},"\"\n",[372,1441,1442,1445,1447,1449,1451],{"class":374,"line":403},[372,1443,1444],{"class":410},"vld-axum ",[372,1446,414],{"class":386},[372,1448,484],{"class":386},[372,1450,1436],{"class":462},[372,1452,1439],{"class":386},[372,1454,1455,1458,1460,1462,1465],{"class":374,"line":439},[372,1456,1457],{"class":410},"axum ",[372,1459,414],{"class":386},[372,1461,484],{"class":386},[372,1463,1464],{"class":462},"0.8",[372,1466,1439],{"class":386},[372,1468,1469,1472,1474,1477,1480,1482,1484,1486,1488,1490,1493,1495,1498,1500,1503,1505,1508],{"class":374,"line":444},[372,1470,1471],{"class":410},"tokio ",[372,1473,414],{"class":386},[372,1475,1476],{"class":386}," {",[372,1478,1479],{"class":410}," version ",[372,1481,414],{"class":386},[372,1483,484],{"class":386},[372,1485,717],{"class":462},[372,1487,490],{"class":386},[372,1489,665],{"class":386},[372,1491,1492],{"class":410}," features ",[372,1494,414],{"class":386},[372,1496,1497],{"class":386}," [",[372,1499,490],{"class":386},[372,1501,1502],{"class":462},"full",[372,1504,490],{"class":386},[372,1506,1507],{"class":386},"]",[372,1509,1510],{"class":386}," }\n",[363,1512,1514],{"className":365,"code":1513,"language":367,"meta":368,"style":368},"use axum::{routing::post, Router};\nuse vld_axum::VldJson;\n\nvld::schema! {\n    #[derive(Debug)]\n    pub struct CreateUser {\n        pub name: String => vld::string().min(2).max(50),\n        pub email: String => vld::string().email(),\n    }\n}\n\nasync fn create_user(VldJson(body): VldJson\u003CCreateUser>) -> String {\n    format!(\"created {}\", body.name)\n}\n\n#[tokio::main]\nasync fn main() {\n    let app = Router::new().route(\"\u002Fusers\", post(create_user));\n    let listener = tokio::net::TcpListener::bind(\"127.0.0.1:3000\").await.unwrap();\n    axum::serve(listener, app).await.unwrap();\n}\n",[350,1515,1516,1542,1557,1561,1571,1583,1594,1630,1654,1658,1662,1666,1707,1734,1738,1742,1757,1771,1814,1861,1891],{"__ignoreMap":368},[372,1517,1518,1520,1523,1526,1529,1531,1534,1536,1539],{"class":374,"line":375},[372,1519,379],{"class":378},[372,1521,1522],{"class":382}," axum",[372,1524,1525],{"class":386},"::{",[372,1527,1528],{"class":382},"routing",[372,1530,387],{"class":386},[372,1532,1533],{"class":382},"post",[372,1535,665],{"class":386},[372,1537,1538],{"class":382}," Router",[372,1540,1541],{"class":386},"};\n",[372,1543,1544,1546,1549,1551,1554],{"class":374,"line":396},[372,1545,379],{"class":378},[372,1547,1548],{"class":382}," vld_axum",[372,1550,387],{"class":386},[372,1552,1553],{"class":382},"VldJson",[372,1555,1556],{"class":386},";\n",[372,1558,1559],{"class":374,"line":403},[372,1560,400],{"emptyLinePlaceholder":399},[372,1562,1563,1565,1567,1569],{"class":374,"line":439},[372,1564,641],{"class":382},[372,1566,387],{"class":386},[372,1568,646],{"class":421},[372,1570,649],{"class":386},[372,1572,1573,1575,1577,1579,1581],{"class":374,"line":444},[372,1574,654],{"class":386},[372,1576,657],{"class":410},[372,1578,450],{"class":386},[372,1580,662],{"class":382},[372,1582,671],{"class":386},[372,1584,1585,1587,1589,1592],{"class":374,"line":496},[372,1586,676],{"class":406},[372,1588,679],{"class":406},[372,1590,1591],{"class":382}," CreateUser",[372,1593,649],{"class":386},[372,1595,1596,1598,1600,1602,1604,1606,1608,1610,1612,1614,1616,1618,1620,1622,1624,1626,1628],{"class":374,"line":529},[372,1597,689],{"class":406},[372,1599,809],{"class":410},[372,1601,695],{"class":386},[372,1603,698],{"class":382},[372,1605,701],{"class":386},[372,1607,383],{"class":382},[372,1609,387],{"class":386},[372,1611,422],{"class":421},[372,1613,425],{"class":386},[372,1615,712],{"class":421},[372,1617,450],{"class":386},[372,1619,830],{"class":378},[372,1621,475],{"class":386},[372,1623,835],{"class":421},[372,1625,450],{"class":386},[372,1627,840],{"class":378},[372,1629,720],{"class":386},[372,1631,1632,1634,1636,1638,1640,1642,1644,1646,1648,1650,1652],{"class":374,"line":534},[372,1633,689],{"class":406},[372,1635,850],{"class":410},[372,1637,695],{"class":386},[372,1639,698],{"class":382},[372,1641,701],{"class":386},[372,1643,383],{"class":382},[372,1645,387],{"class":386},[372,1647,422],{"class":421},[372,1649,425],{"class":386},[372,1651,433],{"class":421},[372,1653,869],{"class":386},[372,1655,1656],{"class":374,"line":541},[372,1657,756],{"class":386},[372,1659,1660],{"class":374,"line":569},[372,1661,761],{"class":386},[372,1663,1664],{"class":374,"line":768},[372,1665,400],{"emptyLinePlaceholder":399},[372,1667,1668,1671,1674,1677,1679,1681,1683,1686,1689,1692,1694,1697,1700,1703,1705],{"class":374,"line":779},[372,1669,1670],{"class":378},"async",[372,1672,1673],{"class":378}," fn",[372,1675,1676],{"class":421}," create_user",[372,1678,450],{"class":386},[372,1680,1553],{"class":421},[372,1682,450],{"class":386},[372,1684,1685],{"class":410},"body",[372,1687,1688],{"class":386},"):",[372,1690,1691],{"class":382}," VldJson",[372,1693,885],{"class":386},[372,1695,1696],{"class":382},"CreateUser",[372,1698,1699],{"class":386},">)",[372,1701,1702],{"class":386}," ->",[372,1704,698],{"class":382},[372,1706,649],{"class":386},[372,1708,1709,1712,1714,1716,1719,1721,1723,1726,1728,1731],{"class":374,"line":792},[372,1710,1711],{"class":421},"    format!",[372,1713,450],{"class":386},[372,1715,490],{"class":386},[372,1717,1718],{"class":462},"created ",[372,1720,1312],{"class":386},[372,1722,665],{"class":386},[372,1724,1725],{"class":410}," body",[372,1727,361],{"class":386},[372,1729,1730],{"class":410},"name",[372,1732,1733],{"class":386},")\n",[372,1735,1736],{"class":374,"line":804},[372,1737,761],{"class":386},[372,1739,1740],{"class":374,"line":845},[372,1741,400],{"emptyLinePlaceholder":399},[372,1743,1744,1747,1750,1752,1755],{"class":374,"line":872},[372,1745,1746],{"class":386},"#[",[372,1748,1749],{"class":410},"tokio",[372,1751,387],{"class":386},[372,1753,1754],{"class":410},"main",[372,1756,1424],{"class":386},[372,1758,1759,1761,1763,1766,1769],{"class":374,"line":925},[372,1760,1670],{"class":378},[372,1762,1673],{"class":378},[372,1764,1765],{"class":421}," main",[372,1767,1768],{"class":386},"()",[372,1770,649],{"class":386},[372,1772,1773,1775,1778,1780,1782,1784,1787,1789,1792,1794,1796,1799,1801,1803,1806,1808,1811],{"class":374,"line":985},[372,1774,1235],{"class":406},[372,1776,1777],{"class":410}," app ",[372,1779,414],{"class":386},[372,1781,1538],{"class":382},[372,1783,387],{"class":386},[372,1785,1786],{"class":421},"new",[372,1788,425],{"class":386},[372,1790,1791],{"class":421},"route",[372,1793,450],{"class":386},[372,1795,490],{"class":386},[372,1797,1798],{"class":462},"\u002Fusers",[372,1800,490],{"class":386},[372,1802,665],{"class":386},[372,1804,1805],{"class":421}," post",[372,1807,450],{"class":386},[372,1809,1810],{"class":410},"create_user",[372,1812,1813],{"class":386},"));\n",[372,1815,1816,1818,1821,1823,1826,1828,1831,1833,1836,1838,1841,1843,1845,1848,1850,1852,1855,1857,1859],{"class":374,"line":1018},[372,1817,1235],{"class":406},[372,1819,1820],{"class":410}," listener ",[372,1822,414],{"class":386},[372,1824,1825],{"class":382}," tokio",[372,1827,387],{"class":386},[372,1829,1830],{"class":382},"net",[372,1832,387],{"class":386},[372,1834,1835],{"class":382},"TcpListener",[372,1837,387],{"class":386},[372,1839,1840],{"class":421},"bind",[372,1842,450],{"class":386},[372,1844,490],{"class":386},[372,1846,1847],{"class":462},"127.0.0.1:3000",[372,1849,490],{"class":386},[372,1851,475],{"class":386},[372,1853,1854],{"class":1210},"await",[372,1856,361],{"class":386},[372,1858,478],{"class":421},[372,1860,436],{"class":386},[372,1862,1863,1866,1868,1871,1873,1876,1878,1881,1883,1885,1887,1889],{"class":374,"line":1023},[372,1864,1865],{"class":382},"    axum",[372,1867,387],{"class":386},[372,1869,1870],{"class":421},"serve",[372,1872,450],{"class":386},[372,1874,1875],{"class":410},"listener",[372,1877,665],{"class":386},[372,1879,1880],{"class":410}," app",[372,1882,475],{"class":386},[372,1884,1854],{"class":1210},[372,1886,361],{"class":386},[372,1888,478],{"class":421},[372,1890,436],{"class":386},[372,1892,1893],{"class":374,"line":1028},[372,1894,761],{"class":386},[346,1896,1897,1898,1901,1902,1905,1906,1909,1910,361],{},"Invalid bodies get a ",[350,1899,1900],{},"422 Unprocessable Entity"," with every issue; a wrong ",[350,1903,1904],{},"Content-Type"," gets ",[350,1907,1908],{},"415",". The response format is the same for all web crates, see the ",[1146,1911,1912],{"href":149},"web overview",[341,1914,1916],{"id":1915},"next-steps","Next steps",[1918,1919,1920,1926,1934,1939],"ul",{},[1921,1922,1923,1925],"li",{},[1146,1924,28],{"href":35},": every built-in type and check.",[1921,1927,1928,1930,1931,1933],{},[1146,1929,74],{"href":81},": ",[350,1932,646],{},", derive, renames, lenient parsing.",[1921,1935,1936,1938],{},[1146,1937,96],{"href":103},": issue codes, custom messages, translations.",[1921,1940,1941,1943],{},[1146,1942,122],{"href":129},": JSON Schema output and diffs.",[1945,1946,1947],"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 .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);}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":368,"searchDepth":396,"depth":403,"links":1949},[1950,1951,1952,1953,1954],{"id":343,"depth":396,"text":344},{"id":595,"depth":396,"text":596},{"id":1151,"depth":396,"text":1152},{"id":1398,"depth":396,"text":1399},{"id":1915,"depth":396,"text":1916},"Define a schema, parse JSON, handle errors and serve it over HTTP in a few minutes.","md",null,{},{"title":19,"description":1955},"j7-lL0vGRwk0ukKDMqktf6oimZmyOr-iQvvxDNq_BYA",[1962,1964],{"title":15,"path":16,"stem":17,"description":1963,"children":-1},"Add vld to Cargo.toml and pick the features you need.",{"title":23,"path":24,"stem":25,"description":1965,"children":-1},"Minimum supported Rust version of every crate and feature.",1794036356985]