[{"data":1,"prerenderedAt":1735},["ShallowReactive",2],{"navigation":3,"\u002Fintegrations\u002Fshared\u002Fhttp-common":335,"\u002Fintegrations\u002Fshared\u002Fhttp-common-surround":1730},[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":298,"body":337,"description":1716,"extension":1717,"links":1718,"meta":1727,"navigation":530,"path":299,"seo":1728,"stem":300,"__hash__":1729},"docs\u002F6.integrations\u002F8.shared\u002F1.http-common.md",{"type":338,"value":339,"toc":1705},"minimark",[340,382,389,394,440,477,483,487,490,966,975,1262,1266,1271,1430,1434,1482,1485,1612,1616,1666,1670,1701],[341,342,343,344,347,348,347,350,347,352,347,354,347,356,347,358,347,360,347,362,364,365,367,368,371,372,347,375,364,378,381],"p",{},"The common core of ",[345,346,152],"code",{},", ",[345,349,156],{},[345,351,160],{},[345,353,164],{},[345,355,168],{},[345,357,172],{},[345,359,176],{},[345,361,180],{},[345,363,184],{}," and ",[345,366,188],{},". It is framework-agnostic: no HTTP framework or ",[345,369,370],{},"http"," crate dependency, only ",[345,373,374],{},"vld",[345,376,377],{},"serde",[345,379,380],{},"serde_json",".",[341,383,384,385,381],{},"You normally get it through an adapter. Depend on it directly to write an adapter for another framework, or to build the same error body in your own handlers. The rules it implements are described in the ",[386,387,388],"a",{"href":149},"web adapters overview",[390,391,393],"h2",{"id":392},"install","Install",[395,396,402],"pre",{"className":397,"code":398,"filename":399,"language":400,"meta":401,"style":401},"language-toml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","[dependencies]\nvld-http-common = \"0.5\"\n","Cargo.toml","toml","",[345,403,404,420],{"__ignoreMap":401},[405,406,409,413,417],"span",{"class":407,"line":408},"line",1,[405,410,412],{"class":411},"sMK4o","[",[405,414,416],{"class":415},"sBMFI","dependencies",[405,418,419],{"class":411},"]\n",[405,421,423,427,430,433,437],{"class":407,"line":422},2,[405,424,426],{"class":425},"sTEyZ","vld-http-common ",[405,428,429],{"class":411},"=",[405,431,432],{"class":411}," \"",[405,434,436],{"class":435},"sfazB","0.5",[405,438,439],{"class":411},"\"\n",[441,442,443,456],"table",{},[444,445,446],"thead",{},[447,448,449,453],"tr",{},[450,451,452],"th",{},"Feature",[450,454,455],{},"Description",[457,458,459],"tbody",{},[447,460,461,467],{},[462,463,464],"td",{},[345,465,466],{},"conformance",[462,468,469,470,472,473,476],{},"Test support: the shared adapter conformance suite (",[345,471,466],{}," module, ",[345,474,475],{},"conformance_suite!","). Used by the adapters' dev-dependencies",[341,478,479,480,482],{},"MSRV 1.85 (see ",[386,481,23],{"href":24},").",[390,484,486],{"id":485},"example","Example",[341,488,489],{},"A minimal adapter for a JSON body:",[395,491,495],{"className":492,"code":493,"language":494,"meta":401,"style":401},"language-rust shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","use vld_http_common::{parse_json_body, require_json_content_type, VldHttpError};\n\nvld::schema! {\n    #[derive(Debug)]\n    pub struct User {\n        pub name: String => vld::string().min(2),\n    }\n}\n\nfn extract(content_type: Option\u003C&str>, body: &[u8]) -> Result\u003CUser, VldHttpError> {\n    require_json_content_type(content_type)?;      \u002F\u002F 415\n    let value = parse_json_body(body)?;              \u002F\u002F 422 on malformed JSON\n    Ok(User::parse_value(&value)?)                   \u002F\u002F 422 on validation errors\n}\n\nlet err = extract(Some(\"application\u002Fjson\"), br#\"{\"name\": \"A\"}\"#).unwrap_err();\nassert_eq!(err.status(), 422);\nassert_eq!(err.body()[\"issues\"][0][\"code\"], \"too_small\");\n\nlet err = extract(Some(\"text\u002Fplain\"), b\"{}\").unwrap_err();\nassert_eq!(err.status(), 415);\n","rust",[345,496,497,526,532,547,565,580,620,626,632,637,700,717,741,768,773,778,829,854,903,908,946],{"__ignoreMap":401},[405,498,499,503,506,509,512,515,518,520,523],{"class":407,"line":408},[405,500,502],{"class":501},"sbssI","use",[405,504,505],{"class":415}," vld_http_common",[405,507,508],{"class":411},"::{",[405,510,511],{"class":415},"parse_json_body",[405,513,514],{"class":411},",",[405,516,517],{"class":415}," require_json_content_type",[405,519,514],{"class":411},[405,521,522],{"class":415}," VldHttpError",[405,524,525],{"class":411},"};\n",[405,527,528],{"class":407,"line":422},[405,529,531],{"emptyLinePlaceholder":530},true,"\n",[405,533,535,537,540,544],{"class":407,"line":534},3,[405,536,374],{"class":415},[405,538,539],{"class":411},"::",[405,541,543],{"class":542},"s2Zo4","schema!",[405,545,546],{"class":411}," {\n",[405,548,550,553,556,559,562],{"class":407,"line":549},4,[405,551,552],{"class":411},"    #[",[405,554,555],{"class":425},"derive",[405,557,558],{"class":411},"(",[405,560,561],{"class":415},"Debug",[405,563,564],{"class":411},")]\n",[405,566,568,572,575,578],{"class":407,"line":567},5,[405,569,571],{"class":570},"spNyl","    pub",[405,573,574],{"class":570}," struct",[405,576,577],{"class":415}," User",[405,579,546],{"class":411},[405,581,583,586,589,592,595,598,601,603,606,609,612,614,617],{"class":407,"line":582},6,[405,584,585],{"class":570},"        pub",[405,587,588],{"class":425}," name",[405,590,591],{"class":411},":",[405,593,594],{"class":415}," String",[405,596,597],{"class":411}," =>",[405,599,600],{"class":415}," vld",[405,602,539],{"class":411},[405,604,605],{"class":542},"string",[405,607,608],{"class":411},"().",[405,610,611],{"class":542},"min",[405,613,558],{"class":411},[405,615,616],{"class":501},"2",[405,618,619],{"class":411},"),\n",[405,621,623],{"class":407,"line":622},7,[405,624,625],{"class":411},"    }\n",[405,627,629],{"class":407,"line":628},8,[405,630,631],{"class":411},"}\n",[405,633,635],{"class":407,"line":634},9,[405,636,531],{"emptyLinePlaceholder":530},[405,638,640,643,646,648,651,653,656,659,662,665,668,670,673,676,679,682,685,688,691,693,695,698],{"class":407,"line":639},10,[405,641,642],{"class":501},"fn",[405,644,645],{"class":542}," extract",[405,647,558],{"class":411},[405,649,650],{"class":425},"content_type",[405,652,591],{"class":411},[405,654,655],{"class":415}," Option",[405,657,658],{"class":411},"\u003C&",[405,660,661],{"class":415},"str",[405,663,664],{"class":411},">,",[405,666,667],{"class":425}," body",[405,669,591],{"class":411},[405,671,672],{"class":411}," &[",[405,674,675],{"class":415},"u8",[405,677,678],{"class":411},"])",[405,680,681],{"class":411}," ->",[405,683,684],{"class":415}," Result",[405,686,687],{"class":411},"\u003C",[405,689,690],{"class":415},"User",[405,692,514],{"class":411},[405,694,522],{"class":415},[405,696,697],{"class":411},">",[405,699,546],{"class":411},[405,701,703,706,708,710,713],{"class":407,"line":702},11,[405,704,705],{"class":542},"    require_json_content_type",[405,707,558],{"class":411},[405,709,650],{"class":425},[405,711,712],{"class":411},")?;",[405,714,716],{"class":715},"sHwdD","      \u002F\u002F 415\n",[405,718,720,723,726,728,731,733,736,738],{"class":407,"line":719},12,[405,721,722],{"class":570},"    let",[405,724,725],{"class":425}," value ",[405,727,429],{"class":411},[405,729,730],{"class":542}," parse_json_body",[405,732,558],{"class":411},[405,734,735],{"class":425},"body",[405,737,712],{"class":411},[405,739,740],{"class":715},"              \u002F\u002F 422 on malformed JSON\n",[405,742,744,747,749,751,753,756,759,762,765],{"class":407,"line":743},13,[405,745,746],{"class":415},"    Ok",[405,748,558],{"class":411},[405,750,690],{"class":415},[405,752,539],{"class":411},[405,754,755],{"class":542},"parse_value",[405,757,758],{"class":411},"(&",[405,760,761],{"class":425},"value",[405,763,764],{"class":411},")?)",[405,766,767],{"class":715},"                   \u002F\u002F 422 on validation errors\n",[405,769,771],{"class":407,"line":770},14,[405,772,631],{"class":411},[405,774,776],{"class":407,"line":775},15,[405,777,531],{"emptyLinePlaceholder":530},[405,779,781,784,787,789,791,793,796,798,801,804,806,809,812,815,818,821,823,826],{"class":407,"line":780},16,[405,782,783],{"class":570},"let",[405,785,786],{"class":425}," err ",[405,788,429],{"class":411},[405,790,645],{"class":542},[405,792,558],{"class":411},[405,794,795],{"class":415},"Some",[405,797,558],{"class":411},[405,799,800],{"class":411},"\"",[405,802,803],{"class":435},"application\u002Fjson",[405,805,800],{"class":411},[405,807,808],{"class":411},"),",[405,810,811],{"class":435}," br",[405,813,814],{"class":411},"#\"",[405,816,817],{"class":435},"{\"name\": \"A\"}",[405,819,820],{"class":411},"\"#",[405,822,482],{"class":411},[405,824,825],{"class":542},"unwrap_err",[405,827,828],{"class":411},"();\n",[405,830,832,835,837,840,842,845,848,851],{"class":407,"line":831},17,[405,833,834],{"class":542},"assert_eq!",[405,836,558],{"class":411},[405,838,839],{"class":425},"err",[405,841,381],{"class":411},[405,843,844],{"class":542},"status",[405,846,847],{"class":411},"(),",[405,849,850],{"class":501}," 422",[405,852,853],{"class":411},");\n",[405,855,857,859,861,863,865,867,870,872,875,877,880,883,885,887,889,891,894,896,899,901],{"class":407,"line":856},18,[405,858,834],{"class":542},[405,860,558],{"class":411},[405,862,839],{"class":425},[405,864,381],{"class":411},[405,866,735],{"class":542},[405,868,869],{"class":411},"()[",[405,871,800],{"class":411},[405,873,874],{"class":435},"issues",[405,876,800],{"class":411},[405,878,879],{"class":411},"][",[405,881,882],{"class":501},"0",[405,884,879],{"class":411},[405,886,800],{"class":411},[405,888,345],{"class":435},[405,890,800],{"class":411},[405,892,893],{"class":411},"],",[405,895,432],{"class":411},[405,897,898],{"class":435},"too_small",[405,900,800],{"class":411},[405,902,853],{"class":411},[405,904,906],{"class":407,"line":905},19,[405,907,531],{"emptyLinePlaceholder":530},[405,909,911,913,915,917,919,921,923,925,927,930,932,934,937,940,942,944],{"class":407,"line":910},20,[405,912,783],{"class":570},[405,914,786],{"class":425},[405,916,429],{"class":411},[405,918,645],{"class":542},[405,920,558],{"class":411},[405,922,795],{"class":415},[405,924,558],{"class":411},[405,926,800],{"class":411},[405,928,929],{"class":435},"text\u002Fplain",[405,931,800],{"class":411},[405,933,808],{"class":411},[405,935,936],{"class":435}," b",[405,938,939],{"class":411},"\"{}\"",[405,941,482],{"class":411},[405,943,825],{"class":542},[405,945,828],{"class":411},[405,947,949,951,953,955,957,959,961,964],{"class":407,"line":948},21,[405,950,834],{"class":542},[405,952,558],{"class":411},[405,954,839],{"class":425},[405,956,381],{"class":411},[405,958,844],{"class":542},[405,960,847],{"class":411},[405,962,963],{"class":501}," 415",[405,965,853],{"class":411},[341,967,968,969,972,973,591],{},"Text sources go through ",[345,970,971],{},"parse_coerced"," instead of ",[345,974,755],{},[395,976,978],{"className":492,"code":977,"language":494,"meta":401,"style":401},"use vld_http_common::{parse_coerced, query_string_to_json};\n\nvld::schema! {\n    #[derive(Debug)]\n    pub struct Search {\n        pub q: String => vld::string(),\n        pub page: i64 => vld::number().int().min(1),\n        pub tags: Vec\u003CString> => vld::array(vld::string()),\n    }\n}\n\nlet value = query_string_to_json(\"q=123&page=2&tags=a\");\nlet s: Search = parse_coerced(&value).unwrap();\nassert_eq!((s.q.as_str(), s.page, s.tags.len()), (\"123\", 2, 1));\n",[345,979,980,997,1001,1011,1023,1034,1056,1093,1132,1136,1140,1144,1165,1193],{"__ignoreMap":401},[405,981,982,984,986,988,990,992,995],{"class":407,"line":408},[405,983,502],{"class":501},[405,985,505],{"class":415},[405,987,508],{"class":411},[405,989,971],{"class":415},[405,991,514],{"class":411},[405,993,994],{"class":415}," query_string_to_json",[405,996,525],{"class":411},[405,998,999],{"class":407,"line":422},[405,1000,531],{"emptyLinePlaceholder":530},[405,1002,1003,1005,1007,1009],{"class":407,"line":534},[405,1004,374],{"class":415},[405,1006,539],{"class":411},[405,1008,543],{"class":542},[405,1010,546],{"class":411},[405,1012,1013,1015,1017,1019,1021],{"class":407,"line":549},[405,1014,552],{"class":411},[405,1016,555],{"class":425},[405,1018,558],{"class":411},[405,1020,561],{"class":415},[405,1022,564],{"class":411},[405,1024,1025,1027,1029,1032],{"class":407,"line":567},[405,1026,571],{"class":570},[405,1028,574],{"class":570},[405,1030,1031],{"class":415}," Search",[405,1033,546],{"class":411},[405,1035,1036,1038,1041,1043,1045,1047,1049,1051,1053],{"class":407,"line":582},[405,1037,585],{"class":570},[405,1039,1040],{"class":425}," q",[405,1042,591],{"class":411},[405,1044,594],{"class":415},[405,1046,597],{"class":411},[405,1048,600],{"class":415},[405,1050,539],{"class":411},[405,1052,605],{"class":542},[405,1054,1055],{"class":411},"(),\n",[405,1057,1058,1060,1063,1065,1068,1070,1072,1074,1077,1079,1082,1084,1086,1088,1091],{"class":407,"line":622},[405,1059,585],{"class":570},[405,1061,1062],{"class":425}," page",[405,1064,591],{"class":411},[405,1066,1067],{"class":415}," i64",[405,1069,597],{"class":411},[405,1071,600],{"class":415},[405,1073,539],{"class":411},[405,1075,1076],{"class":542},"number",[405,1078,608],{"class":411},[405,1080,1081],{"class":542},"int",[405,1083,608],{"class":411},[405,1085,611],{"class":542},[405,1087,558],{"class":411},[405,1089,1090],{"class":501},"1",[405,1092,619],{"class":411},[405,1094,1095,1097,1100,1102,1105,1107,1110,1112,1114,1116,1118,1121,1123,1125,1127,1129],{"class":407,"line":628},[405,1096,585],{"class":570},[405,1098,1099],{"class":425}," tags",[405,1101,591],{"class":411},[405,1103,1104],{"class":415}," Vec",[405,1106,687],{"class":411},[405,1108,1109],{"class":415},"String",[405,1111,697],{"class":411},[405,1113,597],{"class":411},[405,1115,600],{"class":415},[405,1117,539],{"class":411},[405,1119,1120],{"class":542},"array",[405,1122,558],{"class":411},[405,1124,374],{"class":415},[405,1126,539],{"class":411},[405,1128,605],{"class":542},[405,1130,1131],{"class":411},"()),\n",[405,1133,1134],{"class":407,"line":634},[405,1135,625],{"class":411},[405,1137,1138],{"class":407,"line":639},[405,1139,631],{"class":411},[405,1141,1142],{"class":407,"line":702},[405,1143,531],{"emptyLinePlaceholder":530},[405,1145,1146,1148,1150,1152,1154,1156,1158,1161,1163],{"class":407,"line":719},[405,1147,783],{"class":570},[405,1149,725],{"class":425},[405,1151,429],{"class":411},[405,1153,994],{"class":542},[405,1155,558],{"class":411},[405,1157,800],{"class":411},[405,1159,1160],{"class":435},"q=123&page=2&tags=a",[405,1162,800],{"class":411},[405,1164,853],{"class":411},[405,1166,1167,1169,1172,1174,1176,1179,1182,1184,1186,1188,1191],{"class":407,"line":743},[405,1168,783],{"class":570},[405,1170,1171],{"class":425}," s",[405,1173,591],{"class":411},[405,1175,1031],{"class":415},[405,1177,1178],{"class":411}," =",[405,1180,1181],{"class":542}," parse_coerced",[405,1183,758],{"class":411},[405,1185,761],{"class":425},[405,1187,482],{"class":411},[405,1189,1190],{"class":542},"unwrap",[405,1192,828],{"class":411},[405,1194,1195,1197,1200,1203,1205,1208,1210,1213,1215,1217,1219,1222,1224,1226,1228,1231,1233,1236,1239,1242,1244,1247,1249,1251,1254,1256,1259],{"class":407,"line":770},[405,1196,834],{"class":542},[405,1198,1199],{"class":411},"((",[405,1201,1202],{"class":425},"s",[405,1204,381],{"class":411},[405,1206,1207],{"class":425},"q",[405,1209,381],{"class":411},[405,1211,1212],{"class":542},"as_str",[405,1214,847],{"class":411},[405,1216,1171],{"class":425},[405,1218,381],{"class":411},[405,1220,1221],{"class":425},"page",[405,1223,514],{"class":411},[405,1225,1171],{"class":425},[405,1227,381],{"class":411},[405,1229,1230],{"class":425},"tags",[405,1232,381],{"class":411},[405,1234,1235],{"class":542},"len",[405,1237,1238],{"class":411},"()),",[405,1240,1241],{"class":411}," (",[405,1243,800],{"class":411},[405,1245,1246],{"class":435},"123",[405,1248,800],{"class":411},[405,1250,514],{"class":411},[405,1252,1253],{"class":501}," 2",[405,1255,514],{"class":411},[405,1257,1258],{"class":501}," 1",[405,1260,1261],{"class":411},"));\n",[390,1263,1265],{"id":1264},"api","API",[1267,1268,1270],"h3",{"id":1269},"parsing","Parsing",[441,1272,1273,1282],{},[444,1274,1275],{},[447,1276,1277,1280],{},[450,1278,1279],{},"Item",[450,1281,455],{},[457,1283,1284,1305,1323,1337,1351,1369,1386,1396,1416],{},[447,1285,1286,1291],{},[462,1287,1288],{},[345,1289,1290],{},"coerce_value(raw)",[462,1292,1293,1294,1297,1298,347,1301,1304],{},"Text → JSON without losing information (",[345,1295,1296],{},"\"42\""," → ",[345,1299,1300],{},"42",[345,1302,1303],{},"\"01234\""," stays a string)",[447,1306,1307,1316],{},[462,1308,1309,1312,1313],{},[345,1310,1311],{},"parse_query_string(q)"," \u002F ",[345,1314,1315],{},"query_string_to_json(q)",[462,1317,1318,1319,1322],{},"Query string or form body → JSON object; repeated keys and ",[345,1320,1321],{},"a[]"," become arrays",[447,1324,1325,1330],{},[462,1326,1327],{},[345,1328,1329],{},"parse_form_body(bytes)",[462,1331,1332,1333,1336],{},"Form body → JSON; 422 on non-UTF-8 or more than ",[345,1334,1335],{},"MAX_FORM_FIELDS"," fields",[447,1338,1339,1344],{},[462,1340,1341],{},[345,1342,1343],{},"parse_json_body(bytes)",[462,1345,1346,1347,1350],{},"JSON body → ",[345,1348,1349],{},"Value","; 422 on malformed JSON",[447,1352,1353,1358],{},[462,1354,1355],{},[345,1356,1357],{},"headers_to_json(pairs)",[462,1359,1360,1361,1364,1365,1368],{},"Headers → JSON (snake_case names, names with ",[345,1362,1363],{},"_"," skipped, repeats joined with ",[345,1366,1367],{},"\", \"",")",[447,1370,1371,1379],{},[462,1372,1373,1312,1376],{},[345,1374,1375],{},"cookies_to_json(header)",[345,1377,1378],{},"cookie_headers_to_json(values)",[462,1380,1381,1382,1385],{},"One \u002F all ",[345,1383,1384],{},"Cookie"," header values → JSON (first occurrence wins)",[447,1387,1388,1393],{},[462,1389,1390],{},[345,1391,1392],{},"path_params_to_json(pairs)",[462,1394,1395],{},"Decoded path parameters → JSON (coerced)",[447,1397,1398,1406],{},[462,1399,1400,1312,1403],{},[345,1401,1402],{},"url_decode(s)",[345,1404,1405],{},"percent_decode(s)",[462,1407,1408,1409,1412,1413,1415],{},"Form decoding (",[345,1410,1411],{},"+"," → space) \u002F percent decoding (",[345,1414,1411],{}," kept)",[447,1417,1418,1423],{},[462,1419,1420],{},[345,1421,1422],{},"parse_coerced::\u003CT>(value)",[462,1424,1425,1426,1429],{},"Re-export of ",[345,1427,1428],{},"vld::schema::parse_coerced",": validate with the string \u002F array fallback",[1267,1431,1433],{"id":1432},"content-types","Content types",[441,1435,1436,1444],{},[444,1437,1438],{},[447,1439,1440,1442],{},[450,1441,1279],{},[450,1443,455],{},[457,1445,1446,1462],{},[447,1447,1448,1453],{},[462,1449,1450],{},[345,1451,1452],{},"is_json_content_type(ct)",[462,1454,1455,1457,1458,1461],{},[345,1456,803],{}," or ",[345,1459,1460],{},"application\u002F\u003Cx>+json",", any case, parameters ignored",[447,1463,1464,1472],{},[462,1465,1466,1312,1469],{},[345,1467,1468],{},"require_json_content_type(ct)",[345,1470,1471],{},"require_form_content_type(ct)",[462,1473,1474,1477,1478,1481],{},[345,1475,1476],{},"Ok(())"," or a 415 ",[345,1479,1480],{},"VldHttpError"," (also for a missing header)",[1267,1483,96],{"id":1484},"errors",[441,1486,1487,1495],{},[444,1488,1489],{},[447,1490,1491,1493],{},[450,1492,1279],{},[450,1494,455],{},[457,1496,1497,1540,1556,1576,1599],{},[447,1498,1499,1503],{},[462,1500,1501],{},[345,1502,1480],{},[462,1504,1505,1506,1509,1510,1312,1513,1516,1517,1520,1521,1312,1524,1527,1528,347,1531,347,1534,347,1537],{},"Status + ",[345,1507,1508],{},"VldError",": ",[345,1511,1512],{},"validation",[345,1514,1515],{},"parse"," (422), ",[345,1518,1519],{},"payload_too_large"," (413), ",[345,1522,1523],{},"unsupported_media_type",[345,1525,1526],{},"unsupported_form_media_type"," (415); ",[345,1529,1530],{},"status()",[345,1532,1533],{},"body()",[345,1535,1536],{},"error()",[345,1538,1539],{},"into_error()",[447,1541,1542,1550],{},[462,1543,1544,1312,1547],{},[345,1545,1546],{},"format_vld_error(err)",[345,1548,1549],{},"format_issues(err)",[462,1551,1552,1553,1555],{},"The 422 body \u002F its ",[345,1554,874],{}," list",[447,1557,1558,1569],{},[462,1559,1560,347,1563,347,1566],{},[345,1561,1562],{},"format_payload_too_large()",[345,1564,1565],{},"format_unsupported_media_type()",[345,1567,1568],{},"format_generic_error(msg)",[462,1570,1571,1572,1575],{},"The 413 \u002F 415 \u002F ",[345,1573,1574],{},"{\"error\": msg}"," bodies",[447,1577,1578,1592],{},[462,1579,1580,347,1583,347,1586,347,1589],{},[345,1581,1582],{},"ValidationErrorBody",[345,1584,1585],{},"ValidationIssue",[345,1587,1588],{},"ErrorBody",[345,1590,1591],{},"ErrorWithMessage",[462,1593,1594,1595,1598],{},"The body shapes as ",[345,1596,1597],{},"vld::schema!"," structs (usable as OpenAPI response schemas)",[447,1600,1601,1609],{},[462,1602,1603,347,1606],{},[345,1604,1605],{},"UNSUPPORTED_MEDIA_TYPE_MESSAGE",[345,1607,1608],{},"UNSUPPORTED_FORM_MEDIA_TYPE_MESSAGE",[462,1610,1611],{},"The 415 messages",[1267,1613,1615],{"id":1614},"limits","Limits",[441,1617,1618,1626],{},[444,1619,1620],{},[447,1621,1622,1624],{},[450,1623,1279],{},[450,1625,455],{},[457,1627,1628,1638,1647],{},[447,1629,1630,1635],{},[462,1631,1632],{},[345,1633,1634],{},"DEFAULT_BODY_LIMIT",[462,1636,1637],{},"2 MiB, the default body limit of every adapter",[447,1639,1640,1644],{},[462,1641,1642],{},[345,1643,1335],{},[462,1645,1646],{},"1000",[447,1648,1649,1654],{},[462,1650,1651],{},[345,1652,1653],{},"VldBodyLimit(usize)",[462,1655,1656,1657,347,1659,347,1661,1241,1663,1665],{},"Limit set as app\u002Frequest data in ",[345,1658,156],{},[345,1660,160],{},[345,1662,164],{},[345,1664,168],{}," has its own type)",[390,1667,1669],{"id":1668},"gotchas","Gotchas",[1671,1672,1673,1695],"ul",{},[1674,1675,1676,1679,1680,347,1683,1686,1687,1690,1691,1694],"li",{},[345,1677,1678],{},"path"," in the error body is spelled out by this crate (",[345,1681,1682],{},".user.name",[345,1684,1685],{},".items[0]",") rather than taken from ",[345,1688,1689],{},"PathSegment","'s ",[345,1692,1693],{},"Display",", so the wire format stays stable.",[1674,1696,1697,1700],{},[345,1698,1699],{},"extract_path_param_names"," was removed in 0.5.",[1702,1703,1704],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}",{"title":401,"searchDepth":422,"depth":534,"links":1706},[1707,1708,1709,1715],{"id":392,"depth":422,"text":393},{"id":485,"depth":422,"text":486},{"id":1264,"depth":422,"text":1265,"children":1710},[1711,1712,1713,1714],{"id":1269,"depth":534,"text":1270},{"id":1432,"depth":534,"text":1433},{"id":1484,"depth":534,"text":96},{"id":1614,"depth":534,"text":1615},{"id":1668,"depth":422,"text":1669},"Framework-independent HTTP helpers shared by all vld web adapters — value coercion, query\u002Fform\u002Fheader\u002Fcookie parsing, content-type checks and the error body.","md",[1719,1724],{"label":1720,"icon":1721,"to":1722,"target":1723},"crates.io","i-simple-icons-rust","https:\u002F\u002Fcrates.io\u002Fcrates\u002Fvld-http-common","_blank",{"label":1725,"icon":307,"to":1726,"target":1723},"docs.rs","https:\u002F\u002Fdocs.rs\u002Fvld-http-common",{},{"title":298,"description":1716},"B-T26stEeqlBOjySo6-TCl4BhgPo49OhLKeXZ48_OOM",[1731,1733],{"title":288,"path":289,"stem":290,"description":1732,"children":-1},"Validate Tauri command arguments, events, state and channel messages, without a tauri dependency.",{"title":302,"path":303,"stem":304,"description":1734,"children":-1},"Internal building blocks shared by the database, UI and CLI integration crates.",1794036363394]