[{"data":1,"prerenderedAt":1436},["ShallowReactive",2],{"navigation":3,"\u002Fintegrations\u002Fweb\u002Frocket":335,"\u002Fintegrations\u002Fweb\u002Frocket-surround":1431},[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":172,"body":337,"description":1417,"extension":1418,"links":1419,"meta":1428,"navigation":509,"path":173,"seo":1429,"stem":174,"__hash__":1430},"docs\u002F6.integrations\u002F1.web\u002F07.rocket.md",{"type":338,"value":339,"toc":1409},"minimark",[340,356,361,469,475,479,1103,1113,1117,1271,1275,1288,1292,1316,1363,1372,1376,1405],[341,342,343,344,351,352,355],"p",{},"Data and request guards for ",[345,346,350],"a",{"href":347,"rel":348},"https:\u002F\u002Frocket.rs\u002F",[349],"nofollow","Rocket"," 0.5, and catchers that turn their failures into the shared JSON error body. Shared behaviour (status codes, error body, coercion, header\u002Fcookie rules) is in the ",[345,353,354],{"href":149},"web adapters overview",".",[357,358,360],"h2",{"id":359},"install","Install",[362,363,369],"pre",{"className":364,"code":365,"filename":366,"language":367,"meta":368,"style":368},"language-toml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","[dependencies]\nvld = \"0.5\"\nvld-rocket = \"0.5\"\nrocket = { version = \"0.5\", features = [\"json\"] }\n","Cargo.toml","toml","",[370,371,372,388,408,422],"code",{"__ignoreMap":368},[373,374,377,381,385],"span",{"class":375,"line":376},"line",1,[373,378,380],{"class":379},"sMK4o","[",[373,382,384],{"class":383},"sBMFI","dependencies",[373,386,387],{"class":379},"]\n",[373,389,391,395,398,401,405],{"class":375,"line":390},2,[373,392,394],{"class":393},"sTEyZ","vld ",[373,396,397],{"class":379},"=",[373,399,400],{"class":379}," \"",[373,402,404],{"class":403},"sfazB","0.5",[373,406,407],{"class":379},"\"\n",[373,409,411,414,416,418,420],{"class":375,"line":410},3,[373,412,413],{"class":393},"vld-rocket ",[373,415,397],{"class":379},[373,417,400],{"class":379},[373,419,404],{"class":403},[373,421,407],{"class":379},[373,423,425,428,430,433,436,438,440,442,445,448,451,453,456,458,461,463,466],{"class":375,"line":424},4,[373,426,427],{"class":393},"rocket ",[373,429,397],{"class":379},[373,431,432],{"class":379}," {",[373,434,435],{"class":393}," version ",[373,437,397],{"class":379},[373,439,400],{"class":379},[373,441,404],{"class":403},[373,443,444],{"class":379},"\"",[373,446,447],{"class":379},",",[373,449,450],{"class":393}," features ",[373,452,397],{"class":379},[373,454,455],{"class":379}," [",[373,457,444],{"class":379},[373,459,460],{"class":403},"json",[373,462,444],{"class":379},[373,464,465],{"class":379},"]",[373,467,468],{"class":379}," }\n",[341,470,471,472,474],{},"No features. MSRV 1.85 (see ",[345,473,23],{"href":24},").",[357,476,478],{"id":477},"example","Example",[362,480,485],{"className":481,"code":482,"filename":483,"language":484,"meta":368,"style":368},"language-rust shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","use vld_rocket::prelude::*;\n\nvld::schema! {\n    #[derive(Debug, Clone)]\n    pub struct CreateUser {\n        pub name: String  => vld::string().min(2).max(50),\n        pub email: String => vld::string().email(),\n    }\n}\n\nvld::schema! {\n    #[derive(Debug, Clone)]\n    pub struct UserPath {\n        pub id: i64 => vld::number().int().min(1),\n    }\n}\n\n#[rocket::post(\"\u002Fusers\", data = \"\u003Cuser>\")]\nfn create_user(user: VldJson\u003CCreateUser>) -> String {\n    format!(\"created {}\", user.name)\n}\n\n\u002F\u002F\u002F Rocket needs every `\u003Cparam>` as an argument too; `VldPath` validates them.\n#[rocket::get(\"\u002Fusers\u002F\u003Cid>\")]\nfn get_user(id: &str, p: VldPath\u003CUserPath>) -> String {\n    let _ = id;\n    format!(\"user #{}\", p.id)\n}\n\n#[rocket::launch]\nfn rocket() -> _ {\n    rocket::build()\n        .mount(\"\u002Fapi\u002Fv1\", rocket::routes![create_user, get_user])\n        .register(\"\u002F\", vld_catchers())\n}\n","main.rs","rust",[370,486,487,505,511,525,547,562,612,641,647,653,658,669,686,698,736,741,746,751,790,825,854,859,864,871,894,938,954,978,983,988,1002,1020,1034,1073,1098],{"__ignoreMap":368},[373,488,489,493,496,499,502],{"class":375,"line":376},[373,490,492],{"class":491},"sbssI","use",[373,494,495],{"class":383}," vld_rocket",[373,497,498],{"class":379},"::",[373,500,501],{"class":383},"prelude",[373,503,504],{"class":379},"::*;\n",[373,506,507],{"class":375,"line":390},[373,508,510],{"emptyLinePlaceholder":509},true,"\n",[373,512,513,516,518,522],{"class":375,"line":410},[373,514,515],{"class":383},"vld",[373,517,498],{"class":379},[373,519,521],{"class":520},"s2Zo4","schema!",[373,523,524],{"class":379}," {\n",[373,526,527,530,533,536,539,541,544],{"class":375,"line":424},[373,528,529],{"class":379},"    #[",[373,531,532],{"class":393},"derive",[373,534,535],{"class":379},"(",[373,537,538],{"class":383},"Debug",[373,540,447],{"class":379},[373,542,543],{"class":383}," Clone",[373,545,546],{"class":379},")]\n",[373,548,550,554,557,560],{"class":375,"line":549},5,[373,551,553],{"class":552},"spNyl","    pub",[373,555,556],{"class":552}," struct",[373,558,559],{"class":383}," CreateUser",[373,561,524],{"class":379},[373,563,565,568,571,574,577,580,583,585,588,591,594,596,599,601,604,606,609],{"class":375,"line":564},6,[373,566,567],{"class":552},"        pub",[373,569,570],{"class":393}," name",[373,572,573],{"class":379},":",[373,575,576],{"class":383}," String",[373,578,579],{"class":379},"  =>",[373,581,582],{"class":383}," vld",[373,584,498],{"class":379},[373,586,587],{"class":520},"string",[373,589,590],{"class":379},"().",[373,592,593],{"class":520},"min",[373,595,535],{"class":379},[373,597,598],{"class":491},"2",[373,600,474],{"class":379},[373,602,603],{"class":520},"max",[373,605,535],{"class":379},[373,607,608],{"class":491},"50",[373,610,611],{"class":379},"),\n",[373,613,615,617,620,622,624,627,629,631,633,635,638],{"class":375,"line":614},7,[373,616,567],{"class":552},[373,618,619],{"class":393}," email",[373,621,573],{"class":379},[373,623,576],{"class":383},[373,625,626],{"class":379}," =>",[373,628,582],{"class":383},[373,630,498],{"class":379},[373,632,587],{"class":520},[373,634,590],{"class":379},[373,636,637],{"class":520},"email",[373,639,640],{"class":379},"(),\n",[373,642,644],{"class":375,"line":643},8,[373,645,646],{"class":379},"    }\n",[373,648,650],{"class":375,"line":649},9,[373,651,652],{"class":379},"}\n",[373,654,656],{"class":375,"line":655},10,[373,657,510],{"emptyLinePlaceholder":509},[373,659,661,663,665,667],{"class":375,"line":660},11,[373,662,515],{"class":383},[373,664,498],{"class":379},[373,666,521],{"class":520},[373,668,524],{"class":379},[373,670,672,674,676,678,680,682,684],{"class":375,"line":671},12,[373,673,529],{"class":379},[373,675,532],{"class":393},[373,677,535],{"class":379},[373,679,538],{"class":383},[373,681,447],{"class":379},[373,683,543],{"class":383},[373,685,546],{"class":379},[373,687,689,691,693,696],{"class":375,"line":688},13,[373,690,553],{"class":552},[373,692,556],{"class":552},[373,694,695],{"class":383}," UserPath",[373,697,524],{"class":379},[373,699,701,703,706,708,711,713,715,717,720,722,725,727,729,731,734],{"class":375,"line":700},14,[373,702,567],{"class":552},[373,704,705],{"class":393}," id",[373,707,573],{"class":379},[373,709,710],{"class":383}," i64",[373,712,626],{"class":379},[373,714,582],{"class":383},[373,716,498],{"class":379},[373,718,719],{"class":520},"number",[373,721,590],{"class":379},[373,723,724],{"class":520},"int",[373,726,590],{"class":379},[373,728,593],{"class":520},[373,730,535],{"class":379},[373,732,733],{"class":491},"1",[373,735,611],{"class":379},[373,737,739],{"class":375,"line":738},15,[373,740,646],{"class":379},[373,742,744],{"class":375,"line":743},16,[373,745,652],{"class":379},[373,747,749],{"class":375,"line":748},17,[373,750,510],{"emptyLinePlaceholder":509},[373,752,754,757,760,762,765,767,769,772,774,776,779,781,783,786,788],{"class":375,"line":753},18,[373,755,756],{"class":379},"#[",[373,758,759],{"class":393},"rocket",[373,761,498],{"class":379},[373,763,764],{"class":393},"post",[373,766,535],{"class":379},[373,768,444],{"class":379},[373,770,771],{"class":403},"\u002Fusers",[373,773,444],{"class":379},[373,775,447],{"class":379},[373,777,778],{"class":393}," data ",[373,780,397],{"class":379},[373,782,400],{"class":379},[373,784,785],{"class":403},"\u003Cuser>",[373,787,444],{"class":379},[373,789,546],{"class":379},[373,791,793,796,799,801,804,806,809,812,815,818,821,823],{"class":375,"line":792},19,[373,794,795],{"class":491},"fn",[373,797,798],{"class":520}," create_user",[373,800,535],{"class":379},[373,802,803],{"class":393},"user",[373,805,573],{"class":379},[373,807,808],{"class":383}," VldJson",[373,810,811],{"class":379},"\u003C",[373,813,814],{"class":383},"CreateUser",[373,816,817],{"class":379},">)",[373,819,820],{"class":379}," ->",[373,822,576],{"class":383},[373,824,524],{"class":379},[373,826,828,831,833,835,838,841,843,846,848,851],{"class":375,"line":827},20,[373,829,830],{"class":520},"    format!",[373,832,535],{"class":379},[373,834,444],{"class":379},[373,836,837],{"class":403},"created ",[373,839,840],{"class":379},"{}\"",[373,842,447],{"class":379},[373,844,845],{"class":393}," user",[373,847,355],{"class":379},[373,849,850],{"class":393},"name",[373,852,853],{"class":379},")\n",[373,855,857],{"class":375,"line":856},21,[373,858,652],{"class":379},[373,860,862],{"class":375,"line":861},22,[373,863,510],{"emptyLinePlaceholder":509},[373,865,867],{"class":375,"line":866},23,[373,868,870],{"class":869},"sHwdD","\u002F\u002F\u002F Rocket needs every `\u003Cparam>` as an argument too; `VldPath` validates them.\n",[373,872,874,876,878,880,883,885,887,890,892],{"class":375,"line":873},24,[373,875,756],{"class":379},[373,877,759],{"class":393},[373,879,498],{"class":379},[373,881,882],{"class":393},"get",[373,884,535],{"class":379},[373,886,444],{"class":379},[373,888,889],{"class":403},"\u002Fusers\u002F\u003Cid>",[373,891,444],{"class":379},[373,893,546],{"class":379},[373,895,897,899,902,904,907,909,912,915,917,920,922,925,927,930,932,934,936],{"class":375,"line":896},25,[373,898,795],{"class":491},[373,900,901],{"class":520}," get_user",[373,903,535],{"class":379},[373,905,906],{"class":393},"id",[373,908,573],{"class":379},[373,910,911],{"class":379}," &",[373,913,914],{"class":383},"str",[373,916,447],{"class":379},[373,918,919],{"class":393}," p",[373,921,573],{"class":379},[373,923,924],{"class":383}," VldPath",[373,926,811],{"class":379},[373,928,929],{"class":383},"UserPath",[373,931,817],{"class":379},[373,933,820],{"class":379},[373,935,576],{"class":383},[373,937,524],{"class":379},[373,939,941,944,947,949,951],{"class":375,"line":940},26,[373,942,943],{"class":552},"    let",[373,945,946],{"class":393}," _ ",[373,948,397],{"class":379},[373,950,705],{"class":393},[373,952,953],{"class":379},";\n",[373,955,957,959,961,963,966,968,970,972,974,976],{"class":375,"line":956},27,[373,958,830],{"class":520},[373,960,535],{"class":379},[373,962,444],{"class":379},[373,964,965],{"class":403},"user #",[373,967,840],{"class":379},[373,969,447],{"class":379},[373,971,919],{"class":393},[373,973,355],{"class":379},[373,975,906],{"class":393},[373,977,853],{"class":379},[373,979,981],{"class":375,"line":980},28,[373,982,652],{"class":379},[373,984,986],{"class":375,"line":985},29,[373,987,510],{"emptyLinePlaceholder":509},[373,989,991,993,995,997,1000],{"class":375,"line":990},30,[373,992,756],{"class":379},[373,994,759],{"class":393},[373,996,498],{"class":379},[373,998,999],{"class":393},"launch",[373,1001,387],{"class":379},[373,1003,1005,1007,1010,1013,1015,1017],{"class":375,"line":1004},31,[373,1006,795],{"class":491},[373,1008,1009],{"class":520}," rocket",[373,1011,1012],{"class":379},"()",[373,1014,820],{"class":379},[373,1016,946],{"class":393},[373,1018,1019],{"class":379},"{\n",[373,1021,1023,1026,1028,1031],{"class":375,"line":1022},32,[373,1024,1025],{"class":383},"    rocket",[373,1027,498],{"class":379},[373,1029,1030],{"class":520},"build",[373,1032,1033],{"class":379},"()\n",[373,1035,1037,1040,1043,1045,1047,1050,1052,1054,1056,1058,1061,1063,1066,1068,1070],{"class":375,"line":1036},33,[373,1038,1039],{"class":379},"        .",[373,1041,1042],{"class":520},"mount",[373,1044,535],{"class":379},[373,1046,444],{"class":379},[373,1048,1049],{"class":403},"\u002Fapi\u002Fv1",[373,1051,444],{"class":379},[373,1053,447],{"class":379},[373,1055,1009],{"class":383},[373,1057,498],{"class":379},[373,1059,1060],{"class":520},"routes!",[373,1062,380],{"class":379},[373,1064,1065],{"class":393},"create_user",[373,1067,447],{"class":379},[373,1069,901],{"class":393},[373,1071,1072],{"class":379},"])\n",[373,1074,1076,1078,1081,1083,1085,1088,1090,1092,1095],{"class":375,"line":1075},34,[373,1077,1039],{"class":379},[373,1079,1080],{"class":520},"register",[373,1082,535],{"class":379},[373,1084,444],{"class":379},[373,1086,1087],{"class":403},"\u002F",[373,1089,444],{"class":379},[373,1091,447],{"class":379},[373,1093,1094],{"class":520}," vld_catchers",[373,1096,1097],{"class":379},"())\n",[373,1099,1101],{"class":375,"line":1100},35,[373,1102,652],{"class":379},[341,1104,1105,1106,1109,1110,474],{},"The full example is ",[370,1107,1108],{},"crates\u002Fvld-rocket\u002Fexamples\u002Frocket_basic.rs"," (",[370,1111,1112],{},"cargo run -p vld-rocket --example rocket_basic",[357,1114,1116],{"id":1115},"api","API",[1118,1119,1120,1133],"table",{},[1121,1122,1123],"thead",{},[1124,1125,1126,1130],"tr",{},[1127,1128,1129],"th",{},"Item",[1127,1131,1132],{},"Description",[1134,1135,1136,1151,1165,1175,1195,1212,1226,1239,1259],"tbody",{},[1124,1137,1138,1144],{},[1139,1140,1141],"td",{},[370,1142,1143],{},"VldJson\u003CT>",[1139,1145,1146,1147,1150],{},"Data guard: JSON body (requires a JSON ",[370,1148,1149],{},"Content-Type",")",[1124,1152,1153,1158],{},[1139,1154,1155],{},[370,1156,1157],{},"VldForm\u003CT>",[1139,1159,1160,1161,1164],{},"Data guard: ",[370,1162,1163],{},"application\u002Fx-www-form-urlencoded"," body",[1124,1166,1167,1172],{},[1139,1168,1169],{},[370,1170,1171],{},"VldQuery\u003CT>",[1139,1173,1174],{},"Request guard: query string",[1124,1176,1177,1182],{},[1139,1178,1179],{},[370,1180,1181],{},"VldPath\u003CT>",[1139,1183,1184,1185,1188,1189,1192,1193,1150],{},"Request guard: the route's dynamic segments (",[370,1186,1187],{},"\u003Cid>","; a trailing ",[370,1190,1191],{},"\u003Crest..>"," gets the remaining segments joined with ",[370,1194,1087],{},[1124,1196,1197,1202],{},[1139,1198,1199],{},[370,1200,1201],{},"VldHeaders\u003CT>",[1139,1203,1204,1205,1208,1209,1150],{},"Request guard: headers (",[370,1206,1207],{},"X-Request-Id"," → ",[370,1210,1211],{},"x_request_id",[1124,1213,1214,1219],{},[1139,1215,1216],{},[370,1217,1218],{},"VldCookie\u003CT>",[1139,1220,1221,1222,1225],{},"Request guard: cookies from all ",[370,1223,1224],{},"Cookie"," headers",[1124,1227,1228,1233],{},[1139,1229,1230],{},[370,1231,1232],{},"vld_catchers()",[1139,1234,1235,1236],{},"All four catchers below, for ",[370,1237,1238],{},".register(\"\u002F\", ...)",[1124,1240,1241,1256],{},[1139,1242,1243,1246,1247,1246,1250,1246,1253],{},[370,1244,1245],{},"vld_400_catcher",", ",[370,1248,1249],{},"vld_413_catcher",[370,1251,1252],{},"vld_415_catcher",[370,1254,1255],{},"vld_422_catcher",[1139,1257,1258],{},"JSON catchers for the individual statuses",[1124,1260,1261,1265],{},[1139,1262,1263],{},[370,1264,501],{},[1139,1266,1267,1268],{},"Everything above plus ",[370,1269,1270],{},"vld::prelude::*",[357,1272,1274],{"id":1273},"error-catchers","Error catchers",[341,1276,1277,1278,1280,1281,1284,1285,355],{},"A failed guard only sets the status; Rocket renders the response through a catcher. Without ",[370,1279,1232],{}," clients get Rocket's default HTML page. The vld catchers answer with the error body the guard stored for that status; when another guard failed with the same status (Rocket's own ",[370,1282,1283],{},"Json",", for example) they answer ",[370,1286,1287],{},"{\"error\": \"\u003Creason>\"}",[357,1289,1291],{"id":1290},"body-limits","Body limits",[341,1293,1294,1297,1298,1300,1301,1304,1305,1308,1309,1312,1313,573],{},[370,1295,1296],{},"VldJson"," reads up to Rocket's ",[370,1299,460],{}," limit and ",[370,1302,1303],{},"VldForm"," up to the ",[370,1306,1307],{},"form"," limit, configured in ",[370,1310,1311],{},"Rocket.toml"," or ",[370,1314,1315],{},"ROCKET_LIMITS",[362,1317,1319],{"className":364,"code":1318,"filename":1311,"language":367,"meta":368,"style":368},"[default.limits]\njson = \"8 MiB\"\nform = \"256 KiB\"\n",[370,1320,1321,1335,1349],{"__ignoreMap":368},[373,1322,1323,1325,1328,1330,1333],{"class":375,"line":376},[373,1324,380],{"class":379},[373,1326,1327],{"class":383},"default",[373,1329,355],{"class":393},[373,1331,1332],{"class":383},"limits",[373,1334,387],{"class":379},[373,1336,1337,1340,1342,1344,1347],{"class":375,"line":390},[373,1338,1339],{"class":393},"json ",[373,1341,397],{"class":379},[373,1343,400],{"class":379},[373,1345,1346],{"class":403},"8 MiB",[373,1348,407],{"class":379},[373,1350,1351,1354,1356,1358,1361],{"class":375,"line":410},[373,1352,1353],{"class":393},"form ",[373,1355,397],{"class":379},[373,1357,400],{"class":379},[373,1359,1360],{"class":403},"256 KiB",[373,1362,407],{"class":379},[341,1364,1365,1366,1368,1369,1371],{},"While a limit is left at Rocket's built-in default (1 MiB for ",[370,1367,460],{},", 32 KiB for ",[370,1370,1307],{},"), the shared 2 MiB applies instead, like in every other vld adapter.",[357,1373,1375],{"id":1374},"gotchas","Gotchas",[1377,1378,1379,1383,1397],"ul",{},[1380,1381,1382],"li",{},"Setting a limit to exactly Rocket's built-in value counts as \"unset\" and gives 2 MiB.",[1380,1384,1385,1388,1389,1392,1393,1396],{},[370,1386,1387],{},"VldPath"," works under any mount point (",[370,1390,1391],{},"\u002Fapi\u002Fv1\u002Fusers\u002F\u003Cid>","), and field names must match the ",[370,1394,1395],{},"\u003Cparam>"," names.",[1380,1398,1399,1401,1402,1404],{},[370,1400,1296],{}," \u002F ",[370,1403,1303],{}," errors are 415, 413 or 422 like everywhere else, but only become JSON with the catchers registered.",[1406,1407,1408],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}",{"title":368,"searchDepth":390,"depth":410,"links":1410},[1411,1412,1413,1414,1415,1416],{"id":359,"depth":390,"text":360},{"id":477,"depth":390,"text":478},{"id":1115,"depth":390,"text":1116},{"id":1273,"depth":390,"text":1274},{"id":1290,"depth":390,"text":1291},{"id":1374,"depth":390,"text":1375},"Rocket request guards that validate JSON bodies, query strings, path segments, forms, headers and cookies with vld schemas, plus JSON error catchers.","md",[1420,1425],{"label":1421,"icon":1422,"to":1423,"target":1424},"crates.io","i-simple-icons-rust","https:\u002F\u002Fcrates.io\u002Fcrates\u002Fvld-rocket","_blank",{"label":1426,"icon":307,"to":1427,"target":1424},"docs.rs","https:\u002F\u002Fdocs.rs\u002Fvld-rocket",{},{"title":172,"description":1417},"wqs1itCSrvEHPJa70ozoP8KCkVVIOp6CGQTwBJRnfQM",[1432,1434],{"title":168,"path":169,"stem":170,"description":1433,"children":-1},"Rama extractors and a JSON validation layer for vld schemas.",{"title":176,"path":177,"stem":178,"description":1435,"children":-1},"Salvo 1.x extractors that validate request data with vld schemas.",1794036361172]