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