[{"data":1,"prerenderedAt":1569},["ShallowReactive",2],{"navigation":3,"\u002Fintegrations\u002Fweb\u002Fwarp":335,"\u002Fintegrations\u002Fweb\u002Fwarp-surround":1564},[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":184,"body":337,"description":1550,"extension":1551,"links":1552,"meta":1561,"navigation":532,"path":185,"seo":1562,"stem":186,"__hash__":1563},"docs\u002F6.integrations\u002F1.web\u002F10.warp.md",{"type":338,"value":339,"toc":1543},"minimark",[340,356,361,470,484,488,1197,1201,1384,1387,1391,1404,1502,1508,1512,1539],[341,342,343,344,351,352,355],"p",{},"Validation filters for ",[345,346,350],"a",{"href":347,"rel":348},"https:\u002F\u002Fdocs.rs\u002Fwarp",[349],"nofollow","Warp"," 0.3 and 0.4. Shared rules (status codes, error body, coercion, headers and cookies) are on 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-warp = \"0.5\"\nwarp = { version = \"0.4\", features = [\"server\"] }\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-warp ",[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,443,446,449,452,454,457,459,462,464,467],{"class":375,"line":424},4,[373,426,427],{"class":393},"warp ",[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,442],{"class":403},"0.4",[373,444,445],{"class":379},"\"",[373,447,448],{"class":379},",",[373,450,451],{"class":393}," features ",[373,453,397],{"class":379},[373,455,456],{"class":379}," [",[373,458,445],{"class":379},[373,460,461],{"class":403},"server",[373,463,445],{"class":379},[373,465,466],{"class":379},"]",[373,468,469],{"class":379}," }\n",[341,471,472,473,476,477,481,482,355],{},"The dependency is ",[370,474,475],{},"warp >=0.3, \u003C0.5","; there are no version features, Cargo picks the warp you use. MSRV ",[478,479,480],"strong",{},"1.85",", see ",[345,483,23],{"href":24},[357,485,487],{"id":486},"example","Example",[362,489,493],{"className":490,"code":491,"language":492,"meta":368,"style":368},"language-rust shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","use vld_warp::prelude::*;\nuse warp::Filter;\n\nvld::schema! {\n    #[derive(Debug, Clone)]\n    pub struct CreateUser {\n        pub name: String  => vld::string().min(2),\n        pub email: String => vld::string().email(),\n    }\n}\n\nvld::schema! {\n    #[derive(Debug, Clone)]\n    pub struct UserId {\n        pub id: i64 => vld::number().int().min(1),\n    }\n}\n\n#[tokio::main]\nasync fn main() {\n    let create = warp::post()\n        .and(warp::path(\"users\"))\n        .and(warp::path::end())\n        .and(vld_json::\u003CCreateUser>())\n        .map(|u: CreateUser| warp::reply::json(&serde_json::json!({ \"name\": u.name })));\n\n    let get = warp::get()\n        .and(warp::path(\"users\"))\n        .and(vld_param::\u003CUserId>(\"id\"))\n        .and(warp::path::end())\n        .map(|p: UserId| format!(\"user #{}\", p.id));\n\n    warp::serve(create.or(get).recover(handle_rejection))\n        .run(([127, 0, 0, 1], 3030))\n        .await;\n}\n","rust",[370,494,495,513,528,534,548,571,586,626,655,661,667,672,683,700,712,750,755,760,765,781,798,819,850,873,894,961,966,985,1010,1039,1060,1102,1107,1145,1181,1192],{"__ignoreMap":368},[373,496,497,501,504,507,510],{"class":375,"line":376},[373,498,500],{"class":499},"sbssI","use",[373,502,503],{"class":383}," vld_warp",[373,505,506],{"class":379},"::",[373,508,509],{"class":383},"prelude",[373,511,512],{"class":379},"::*;\n",[373,514,515,517,520,522,525],{"class":375,"line":390},[373,516,500],{"class":499},[373,518,519],{"class":383}," warp",[373,521,506],{"class":379},[373,523,524],{"class":383},"Filter",[373,526,527],{"class":379},";\n",[373,529,530],{"class":375,"line":410},[373,531,533],{"emptyLinePlaceholder":532},true,"\n",[373,535,536,539,541,545],{"class":375,"line":424},[373,537,538],{"class":383},"vld",[373,540,506],{"class":379},[373,542,544],{"class":543},"s2Zo4","schema!",[373,546,547],{"class":379}," {\n",[373,549,551,554,557,560,563,565,568],{"class":375,"line":550},5,[373,552,553],{"class":379},"    #[",[373,555,556],{"class":393},"derive",[373,558,559],{"class":379},"(",[373,561,562],{"class":383},"Debug",[373,564,448],{"class":379},[373,566,567],{"class":383}," Clone",[373,569,570],{"class":379},")]\n",[373,572,574,578,581,584],{"class":375,"line":573},6,[373,575,577],{"class":576},"spNyl","    pub",[373,579,580],{"class":576}," struct",[373,582,583],{"class":383}," CreateUser",[373,585,547],{"class":379},[373,587,589,592,595,598,601,604,607,609,612,615,618,620,623],{"class":375,"line":588},7,[373,590,591],{"class":576},"        pub",[373,593,594],{"class":393}," name",[373,596,597],{"class":379},":",[373,599,600],{"class":383}," String",[373,602,603],{"class":379},"  =>",[373,605,606],{"class":383}," vld",[373,608,506],{"class":379},[373,610,611],{"class":543},"string",[373,613,614],{"class":379},"().",[373,616,617],{"class":543},"min",[373,619,559],{"class":379},[373,621,622],{"class":499},"2",[373,624,625],{"class":379},"),\n",[373,627,629,631,634,636,638,641,643,645,647,649,652],{"class":375,"line":628},8,[373,630,591],{"class":576},[373,632,633],{"class":393}," email",[373,635,597],{"class":379},[373,637,600],{"class":383},[373,639,640],{"class":379}," =>",[373,642,606],{"class":383},[373,644,506],{"class":379},[373,646,611],{"class":543},[373,648,614],{"class":379},[373,650,651],{"class":543},"email",[373,653,654],{"class":379},"(),\n",[373,656,658],{"class":375,"line":657},9,[373,659,660],{"class":379},"    }\n",[373,662,664],{"class":375,"line":663},10,[373,665,666],{"class":379},"}\n",[373,668,670],{"class":375,"line":669},11,[373,671,533],{"emptyLinePlaceholder":532},[373,673,675,677,679,681],{"class":375,"line":674},12,[373,676,538],{"class":383},[373,678,506],{"class":379},[373,680,544],{"class":543},[373,682,547],{"class":379},[373,684,686,688,690,692,694,696,698],{"class":375,"line":685},13,[373,687,553],{"class":379},[373,689,556],{"class":393},[373,691,559],{"class":379},[373,693,562],{"class":383},[373,695,448],{"class":379},[373,697,567],{"class":383},[373,699,570],{"class":379},[373,701,703,705,707,710],{"class":375,"line":702},14,[373,704,577],{"class":576},[373,706,580],{"class":576},[373,708,709],{"class":383}," UserId",[373,711,547],{"class":379},[373,713,715,717,720,722,725,727,729,731,734,736,739,741,743,745,748],{"class":375,"line":714},15,[373,716,591],{"class":576},[373,718,719],{"class":393}," id",[373,721,597],{"class":379},[373,723,724],{"class":383}," i64",[373,726,640],{"class":379},[373,728,606],{"class":383},[373,730,506],{"class":379},[373,732,733],{"class":543},"number",[373,735,614],{"class":379},[373,737,738],{"class":543},"int",[373,740,614],{"class":379},[373,742,617],{"class":543},[373,744,559],{"class":379},[373,746,747],{"class":499},"1",[373,749,625],{"class":379},[373,751,753],{"class":375,"line":752},16,[373,754,660],{"class":379},[373,756,758],{"class":375,"line":757},17,[373,759,666],{"class":379},[373,761,763],{"class":375,"line":762},18,[373,764,533],{"emptyLinePlaceholder":532},[373,766,768,771,774,776,779],{"class":375,"line":767},19,[373,769,770],{"class":379},"#[",[373,772,773],{"class":393},"tokio",[373,775,506],{"class":379},[373,777,778],{"class":393},"main",[373,780,387],{"class":379},[373,782,784,787,790,793,796],{"class":375,"line":783},20,[373,785,786],{"class":499},"async",[373,788,789],{"class":499}," fn",[373,791,792],{"class":543}," main",[373,794,795],{"class":379},"()",[373,797,547],{"class":379},[373,799,801,804,807,809,811,813,816],{"class":375,"line":800},21,[373,802,803],{"class":576},"    let",[373,805,806],{"class":393}," create ",[373,808,397],{"class":379},[373,810,519],{"class":383},[373,812,506],{"class":379},[373,814,815],{"class":543},"post",[373,817,818],{"class":379},"()\n",[373,820,822,825,828,830,833,835,838,840,842,845,847],{"class":375,"line":821},22,[373,823,824],{"class":379},"        .",[373,826,827],{"class":543},"and",[373,829,559],{"class":379},[373,831,832],{"class":383},"warp",[373,834,506],{"class":379},[373,836,837],{"class":543},"path",[373,839,559],{"class":379},[373,841,445],{"class":379},[373,843,844],{"class":403},"users",[373,846,445],{"class":379},[373,848,849],{"class":379},"))\n",[373,851,853,855,857,859,861,863,865,867,870],{"class":375,"line":852},23,[373,854,824],{"class":379},[373,856,827],{"class":543},[373,858,559],{"class":379},[373,860,832],{"class":383},[373,862,506],{"class":379},[373,864,837],{"class":383},[373,866,506],{"class":379},[373,868,869],{"class":543},"end",[373,871,872],{"class":379},"())\n",[373,874,876,878,880,882,885,888,891],{"class":375,"line":875},24,[373,877,824],{"class":379},[373,879,827],{"class":543},[373,881,559],{"class":379},[373,883,884],{"class":543},"vld_json",[373,886,887],{"class":379},"::\u003C",[373,889,890],{"class":383},"CreateUser",[373,892,893],{"class":379},">())\n",[373,895,897,899,902,905,908,910,912,915,917,919,922,924,927,930,933,935,938,941,943,946,948,950,953,955,958],{"class":375,"line":896},25,[373,898,824],{"class":379},[373,900,901],{"class":543},"map",[373,903,904],{"class":379},"(|",[373,906,907],{"class":393},"u",[373,909,597],{"class":379},[373,911,583],{"class":383},[373,913,914],{"class":379},"|",[373,916,519],{"class":383},[373,918,506],{"class":379},[373,920,921],{"class":383},"reply",[373,923,506],{"class":379},[373,925,926],{"class":543},"json",[373,928,929],{"class":379},"(&",[373,931,932],{"class":383},"serde_json",[373,934,506],{"class":379},[373,936,937],{"class":543},"json!",[373,939,940],{"class":379},"({",[373,942,400],{"class":379},[373,944,945],{"class":403},"name",[373,947,445],{"class":379},[373,949,597],{"class":379},[373,951,952],{"class":393}," u",[373,954,355],{"class":379},[373,956,957],{"class":393},"name ",[373,959,960],{"class":379},"})));\n",[373,962,964],{"class":375,"line":963},26,[373,965,533],{"emptyLinePlaceholder":532},[373,967,969,971,974,976,978,980,983],{"class":375,"line":968},27,[373,970,803],{"class":576},[373,972,973],{"class":393}," get ",[373,975,397],{"class":379},[373,977,519],{"class":383},[373,979,506],{"class":379},[373,981,982],{"class":543},"get",[373,984,818],{"class":379},[373,986,988,990,992,994,996,998,1000,1002,1004,1006,1008],{"class":375,"line":987},28,[373,989,824],{"class":379},[373,991,827],{"class":543},[373,993,559],{"class":379},[373,995,832],{"class":383},[373,997,506],{"class":379},[373,999,837],{"class":543},[373,1001,559],{"class":379},[373,1003,445],{"class":379},[373,1005,844],{"class":403},[373,1007,445],{"class":379},[373,1009,849],{"class":379},[373,1011,1013,1015,1017,1019,1022,1024,1027,1030,1032,1035,1037],{"class":375,"line":1012},29,[373,1014,824],{"class":379},[373,1016,827],{"class":543},[373,1018,559],{"class":379},[373,1020,1021],{"class":543},"vld_param",[373,1023,887],{"class":379},[373,1025,1026],{"class":383},"UserId",[373,1028,1029],{"class":379},">(",[373,1031,445],{"class":379},[373,1033,1034],{"class":403},"id",[373,1036,445],{"class":379},[373,1038,849],{"class":379},[373,1040,1042,1044,1046,1048,1050,1052,1054,1056,1058],{"class":375,"line":1041},30,[373,1043,824],{"class":379},[373,1045,827],{"class":543},[373,1047,559],{"class":379},[373,1049,832],{"class":383},[373,1051,506],{"class":379},[373,1053,837],{"class":383},[373,1055,506],{"class":379},[373,1057,869],{"class":543},[373,1059,872],{"class":379},[373,1061,1063,1065,1067,1069,1071,1073,1075,1077,1080,1082,1084,1087,1090,1092,1095,1097,1099],{"class":375,"line":1062},31,[373,1064,824],{"class":379},[373,1066,901],{"class":543},[373,1068,904],{"class":379},[373,1070,341],{"class":393},[373,1072,597],{"class":379},[373,1074,709],{"class":383},[373,1076,914],{"class":379},[373,1078,1079],{"class":543}," format!",[373,1081,559],{"class":379},[373,1083,445],{"class":379},[373,1085,1086],{"class":403},"user #",[373,1088,1089],{"class":379},"{}\"",[373,1091,448],{"class":379},[373,1093,1094],{"class":393}," p",[373,1096,355],{"class":379},[373,1098,1034],{"class":393},[373,1100,1101],{"class":379},"));\n",[373,1103,1105],{"class":375,"line":1104},32,[373,1106,533],{"emptyLinePlaceholder":532},[373,1108,1110,1113,1115,1118,1120,1123,1125,1128,1130,1132,1135,1138,1140,1143],{"class":375,"line":1109},33,[373,1111,1112],{"class":383},"    warp",[373,1114,506],{"class":379},[373,1116,1117],{"class":543},"serve",[373,1119,559],{"class":379},[373,1121,1122],{"class":393},"create",[373,1124,355],{"class":379},[373,1126,1127],{"class":543},"or",[373,1129,559],{"class":379},[373,1131,982],{"class":393},[373,1133,1134],{"class":379},").",[373,1136,1137],{"class":543},"recover",[373,1139,559],{"class":379},[373,1141,1142],{"class":393},"handle_rejection",[373,1144,849],{"class":379},[373,1146,1148,1150,1153,1156,1159,1161,1164,1166,1168,1170,1173,1176,1179],{"class":375,"line":1147},34,[373,1149,824],{"class":379},[373,1151,1152],{"class":543},"run",[373,1154,1155],{"class":379},"(([",[373,1157,1158],{"class":499},"127",[373,1160,448],{"class":379},[373,1162,1163],{"class":499}," 0",[373,1165,448],{"class":379},[373,1167,1163],{"class":499},[373,1169,448],{"class":379},[373,1171,1172],{"class":499}," 1",[373,1174,1175],{"class":379},"],",[373,1177,1178],{"class":499}," 3030",[373,1180,849],{"class":379},[373,1182,1184,1186,1190],{"class":375,"line":1183},35,[373,1185,824],{"class":379},[373,1187,1189],{"class":1188},"s7zQu","await",[373,1191,527],{"class":379},[373,1193,1195],{"class":375,"line":1194},36,[373,1196,666],{"class":379},[357,1198,1200],{"id":1199},"api","API",[1202,1203,1204,1217],"table",{},[1205,1206,1207],"thead",{},[1208,1209,1210,1214],"tr",{},[1211,1212,1213],"th",{},"Item",[1211,1215,1216],{},"Purpose",[1218,1219,1220,1234,1244,1261,1275,1288,1302,1316,1326,1340,1360,1372],"tbody",{},[1208,1221,1222,1228],{},[1223,1224,1225],"td",{},[370,1226,1227],{},"vld_json::\u003CT>()",[1223,1229,1230,1231],{},"JSON body; 415 without a JSON ",[370,1232,1233],{},"Content-Type",[1208,1235,1236,1241],{},[1223,1237,1238],{},[370,1239,1240],{},"vld_json_limit::\u003CT>(bytes)",[1223,1242,1243],{},"Same with an explicit body limit",[1208,1245,1246,1255],{},[1223,1247,1248,1251,1252],{},[370,1249,1250],{},"vld_form::\u003CT>()"," \u002F ",[370,1253,1254],{},"vld_form_limit::\u003CT>(bytes)",[1223,1256,1257,1260],{},[370,1258,1259],{},"application\u002Fx-www-form-urlencoded"," body",[1208,1262,1263,1268],{},[1223,1264,1265],{},[370,1266,1267],{},"vld_query::\u003CT>()",[1223,1269,1270,1271,1274],{},"Query string (an absent query is ",[370,1272,1273],{},"{}",")",[1208,1276,1277,1282],{},[1223,1278,1279],{},[370,1280,1281],{},"vld_param::\u003CT>(name)",[1223,1283,1284,1285],{},"One path segment, wrapped as ",[370,1286,1287],{},"{name: value}",[1208,1289,1290,1295],{},[1223,1291,1292],{},[370,1293,1294],{},"vld_path::\u003CT>(&names)",[1223,1296,1297,1298,1301],{},"All remaining segments, mapped to ",[370,1299,1300],{},"names"," in order",[1208,1303,1304,1309],{},[1223,1305,1306],{},[370,1307,1308],{},"validate_path_params::\u003CT>(&pairs)",[1223,1310,1311,1312,1315],{},"Validate ",[370,1313,1314],{},"(name, raw)"," pairs you extracted yourself",[1208,1317,1318,1323],{},[1223,1319,1320],{},[370,1321,1322],{},"vld_headers::\u003CT>()",[1223,1324,1325],{},"Request headers",[1208,1327,1328,1333],{},[1223,1329,1330],{},[370,1331,1332],{},"vld_cookie::\u003CT>()",[1223,1334,1335,1336,1339],{},"Cookies from every ",[370,1337,1338],{},"Cookie"," header",[1208,1341,1342,1347],{},[1223,1343,1344],{},[370,1345,1346],{},"VldRejection",[1223,1348,1349,1350,1353,1354,1353,1357],{},"Custom rejection: ",[370,1351,1352],{},"status()",", ",[370,1355,1356],{},"body()",[370,1358,1359],{},"error()",[1208,1361,1362,1366],{},[1223,1363,1364],{},[370,1365,1142],{},[1223,1367,1368,1369],{},"Recovery function for ",[370,1370,1371],{},".recover()",[1208,1373,1374,1378],{},[1223,1375,1376],{},[370,1377,509],{},[1223,1379,1380,1381],{},"All of the above plus ",[370,1382,1383],{},"vld::prelude::*",[341,1385,1386],{},"Path values are percent-decoded before coercion.",[357,1388,1390],{"id":1389},"rejection-handling","Rejection handling",[341,1392,1393,1394,1397,1398,1400,1401,1403],{},"Without ",[370,1395,1396],{},".recover(handle_rejection)"," a ",[370,1399,1346],{}," reaches warp's default handler, which does not know it. ",[370,1402,1142],{}," answers:",[1202,1405,1406,1416],{},[1205,1407,1408],{},[1208,1409,1410,1413],{},[1211,1411,1412],{},"Rejection",[1211,1414,1415],{},"Status",[1218,1417,1418,1427,1437,1447,1457,1476,1486,1494],{},[1208,1419,1420,1424],{},[1223,1421,1422],{},[370,1423,1346],{},[1223,1425,1426],{},"its own status (422 \u002F 413 \u002F 415) and JSON body",[1208,1428,1429,1434],{},[1223,1430,1431],{},[370,1432,1433],{},"PayloadTooLarge",[1223,1435,1436],{},"413",[1208,1438,1439,1444],{},[1223,1440,1441],{},[370,1442,1443],{},"UnsupportedMediaType",[1223,1445,1446],{},"415",[1208,1448,1449,1454],{},[1223,1450,1451],{},[370,1452,1453],{},"LengthRequired",[1223,1455,1456],{},"411",[1208,1458,1459,1473],{},[1223,1460,1461,1353,1464,1353,1467,1353,1470],{},[370,1462,1463],{},"MissingHeader",[370,1465,1466],{},"InvalidHeader",[370,1468,1469],{},"MissingCookie",[370,1471,1472],{},"InvalidQuery",[1223,1474,1475],{},"400",[1208,1477,1478,1483],{},[1223,1479,1480],{},[370,1481,1482],{},"MethodNotAllowed",[1223,1484,1485],{},"405",[1208,1487,1488,1491],{},[1223,1489,1490],{},"not found",[1223,1492,1493],{},"404",[1208,1495,1496,1499],{},[1223,1497,1498],{},"anything else",[1223,1500,1501],{},"500",[341,1503,1504,1505,355],{},"Non-vld rejections get ",[370,1506,1507],{},"{\"error\": \"\u003Cmessage>\"}",[357,1509,1511],{"id":1510},"gotchas","Gotchas",[1513,1514,1515,1523,1536],"ul",{},[1516,1517,1518,1519,1522],"li",{},"Bodies are read as a stream and stop at the limit (2 MiB by default), with or without ",[370,1520,1521],{},"Content-Length",", so chunked uploads are limited too.",[1516,1524,1525,1528,1529,1531,1532,1535],{},[370,1526,1527],{},"vld_path"," needs exactly as many remaining segments as names; any other count is a 404. Use ",[370,1530,1021],{}," or ",[370,1533,1534],{},"validate_path_params"," when static and dynamic segments are interleaved.",[1516,1537,1538],{},"Since 0.5 unknown rejections are 500, not 404.",[1540,1541,1542],"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 .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":390,"depth":410,"links":1544},[1545,1546,1547,1548,1549],{"id":359,"depth":390,"text":360},{"id":486,"depth":390,"text":487},{"id":1199,"depth":390,"text":1200},{"id":1389,"depth":390,"text":1390},{"id":1510,"depth":390,"text":1511},"Warp filters that validate request data with vld schemas, plus a JSON rejection handler.","md",[1553,1558],{"label":1554,"icon":1555,"to":1556,"target":1557},"crates.io","i-simple-icons-rust","https:\u002F\u002Fcrates.io\u002Fcrates\u002Fvld-warp","_blank",{"label":1559,"icon":307,"to":1560,"target":1557},"docs.rs","https:\u002F\u002Fdocs.rs\u002Fvld-warp",{},{"title":184,"description":1550},"UJhDrKz7p6v-2N95D4jiA33npOZOTlB4TBuc-3H5nqo",[1565,1567],{"title":180,"path":181,"stem":182,"description":1566,"children":-1},"A Tower layer that validates JSON request bodies for any http-based service.",{"title":188,"path":189,"stem":190,"description":1568,"children":-1},"Validate tonic gRPC messages and metadata with vld schemas.",1794036361642]