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