[{"data":1,"prerenderedAt":1955},["ShallowReactive",2],{"navigation":3,"\u002Fintegrations\u002Fopenapi\u002Futoipa":335,"\u002Fintegrations\u002Fopenapi\u002Futoipa-surround":1950},[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":198,"body":337,"description":1936,"extension":1937,"links":1938,"meta":1947,"navigation":699,"path":199,"seo":1948,"stem":200,"__hash__":1949},"docs\u002F6.integrations\u002F2.openapi\u002F1.utoipa.md",{"type":338,"value":339,"toc":1929},"minimark",[340,385,390,502,505,579,583,631,638,651,655,1487,1500,1671,1675,1791,1803,1807,1918,1925],[341,342,343,346,347,350,351,354,355,358,359,362,363,366,367,369,370,350,373,376,377,380,381,384],"p",{},[344,345,198],"code",{}," implements utoipa's ",[344,348,349],{},"PartialSchema",", ",[344,352,353],{},"ToSchema"," and ",[344,356,357],{},"IntoParams"," for any type that has a vld ",[344,360,361],{},"json_schema()"," (",[344,364,365],{},"vld::schema!"," or ",[344,368,84],{},"). ",[344,371,372],{},"minLength",[344,374,375],{},"minimum",", formats and the other vld rules show up in the generated OpenAPI document without ",[344,378,379],{},"#[schema(...)]"," \u002F ",[344,382,383],{},"#[param(...)]"," duplicates.",[386,387,389],"h2",{"id":388},"install","Install",[391,392,398],"pre",{"className":393,"code":394,"filename":395,"language":396,"meta":397,"style":397},"language-toml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","[dependencies]\nvld = { version = \"0.5\", features = [\"openapi\"] }\nvld-utoipa = \"0.5\"   # utoipa 5 (default)\nutoipa = \"5\"\n","Cargo.toml","toml","",[344,399,400,416,468,486],{"__ignoreMap":397},[401,402,405,409,413],"span",{"class":403,"line":404},"line",1,[401,406,408],{"class":407},"sMK4o","[",[401,410,412],{"class":411},"sBMFI","dependencies",[401,414,415],{"class":407},"]\n",[401,417,419,423,426,429,432,434,437,441,444,447,450,452,455,457,460,462,465],{"class":403,"line":418},2,[401,420,422],{"class":421},"sTEyZ","vld ",[401,424,425],{"class":407},"=",[401,427,428],{"class":407}," {",[401,430,431],{"class":421}," version ",[401,433,425],{"class":407},[401,435,436],{"class":407}," \"",[401,438,440],{"class":439},"sfazB","0.5",[401,442,443],{"class":407},"\"",[401,445,446],{"class":407},",",[401,448,449],{"class":421}," features ",[401,451,425],{"class":407},[401,453,454],{"class":407}," [",[401,456,443],{"class":407},[401,458,459],{"class":439},"openapi",[401,461,443],{"class":407},[401,463,464],{"class":407},"]",[401,466,467],{"class":407}," }\n",[401,469,471,474,476,478,480,482],{"class":403,"line":470},3,[401,472,473],{"class":421},"vld-utoipa ",[401,475,425],{"class":407},[401,477,436],{"class":407},[401,479,440],{"class":439},[401,481,443],{"class":407},[401,483,485],{"class":484},"sHwdD","   # utoipa 5 (default)\n",[401,487,489,492,494,496,499],{"class":403,"line":488},4,[401,490,491],{"class":421},"utoipa ",[401,493,425],{"class":407},[401,495,436],{"class":407},[401,497,498],{"class":439},"5",[401,500,501],{"class":407},"\"\n",[341,503,504],{},"utoipa 6:",[391,506,508],{"className":393,"code":507,"filename":395,"language":396,"meta":397,"style":397},"[dependencies]\nvld-utoipa = { version = \"0.5\", default-features = false, features = [\"utoipa-6\"] }\nutoipa = \"6\"\n",[344,509,510,518,566],{"__ignoreMap":397},[401,511,512,514,516],{"class":403,"line":404},[401,513,408],{"class":407},[401,515,412],{"class":411},[401,517,415],{"class":407},[401,519,520,522,524,526,528,530,532,534,536,538,541,543,547,549,551,553,555,557,560,562,564],{"class":403,"line":418},[401,521,473],{"class":421},[401,523,425],{"class":407},[401,525,428],{"class":407},[401,527,431],{"class":421},[401,529,425],{"class":407},[401,531,436],{"class":407},[401,533,440],{"class":439},[401,535,443],{"class":407},[401,537,446],{"class":407},[401,539,540],{"class":421}," default-features ",[401,542,425],{"class":407},[401,544,546],{"class":545},"sfNiH"," false",[401,548,446],{"class":407},[401,550,449],{"class":421},[401,552,425],{"class":407},[401,554,454],{"class":407},[401,556,443],{"class":407},[401,558,559],{"class":439},"utoipa-6",[401,561,443],{"class":407},[401,563,464],{"class":407},[401,565,467],{"class":407},[401,567,568,570,572,574,577],{"class":403,"line":470},[401,569,491],{"class":421},[401,571,425],{"class":407},[401,573,436],{"class":407},[401,575,576],{"class":439},"6",[401,578,501],{"class":407},[386,580,582],{"id":581},"features","Features",[584,585,586,602],"table",{},[587,588,589],"thead",{},[590,591,592,596,599],"tr",{},[593,594,595],"th",{},"Feature",[593,597,598],{},"Default",[593,600,601],{},"Description",[603,604,605,619],"tbody",{},[590,606,607,613,616],{},[608,609,610],"td",{},[344,611,612],{},"utoipa-5",[608,614,615],{},"yes",[608,617,618],{},"Build against utoipa 5.x",[590,620,621,625,628],{},[608,622,623],{},[344,624,559],{},[608,626,627],{},"no",[608,629,630],{},"Build against utoipa 6.x",[341,632,633,634,637],{},"Enable exactly one of them; both or none is a compile error. The selected crate is re-exported as ",[344,635,636],{},"vld_utoipa::utoipa",".",[341,639,640,641,643,644,646,647,650],{},"MSRV: 1.85 with ",[344,642,612],{},", 1.88 with ",[344,645,559],{}," (see ",[648,649,23],"a",{"href":24},").",[386,652,654],{"id":653},"example","Example",[391,656,660],{"className":657,"code":658,"language":659,"meta":397,"style":397},"language-rust shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","use vld::prelude::*;\nuse vld_utoipa::impl_to_schema;\n\n\u002F\u002F Nested type: registered as a component automatically.\nvld::schema! {\n    #[derive(Debug)]\n    pub struct Address {\n        pub city: String => vld::string().min(1).max(100),\n        pub zip: String => vld::string().min(5).max(10),\n    }\n}\nimpl_to_schema!(Address);\n\n\u002F\u002F JSON body\nvld::schema! {\n    #[derive(Debug)]\n    pub struct CreateUser {\n        pub name: String => vld::string().min(2).max(100),\n        pub email: String => vld::string().email(),\n        pub age: Option\u003Ci64> => vld::number().int().gte(0).optional(),\n        pub address: Address => vld::nested!(Address),\n    }\n}\nimpl_to_schema!(CreateUser);\n\n\u002F\u002F Query parameters: the location comes from utoipa's own attribute.\nvld::schema! {\n    #[derive(Debug)]\n    #[into_params(parameter_in = Query)]\n    pub struct SearchQuery {\n        pub q: String => vld::string().min(1).max(200),\n    }\n}\nimpl_to_schema!(SearchQuery);\n\n#[utoipa::path(get, path = \"\u002Fsearch\", params(SearchQuery), responses((status = 200)))]\nfn search_users() {}\n\n#[utoipa::path(\n    post,\n    path = \"\u002Fusers\",\n    request_body = CreateUser,\n    responses((status = 200), (status = 422, description = \"Validation failed\")),\n)]\nfn create_user() {}\n\n\u002F\u002F Address is not listed: it is collected through ToSchema::schemas().\n#[derive(utoipa::OpenApi)]\n#[openapi(paths(create_user, search_users), components(schemas(CreateUser)))]\nstruct ApiDoc;\n","rust",[344,661,662,680,695,701,706,721,739,754,803,842,848,854,868,873,879,890,903,915,954,982,1035,1062,1067,1072,1084,1089,1095,1106,1119,1139,1151,1190,1195,1200,1212,1217,1279,1294,1299,1313,1322,1339,1351,1393,1398,1410,1415,1421,1439,1476],{"__ignoreMap":397},[401,663,664,668,671,674,677],{"class":403,"line":404},[401,665,667],{"class":666},"sbssI","use",[401,669,670],{"class":411}," vld",[401,672,673],{"class":407},"::",[401,675,676],{"class":411},"prelude",[401,678,679],{"class":407},"::*;\n",[401,681,682,684,687,689,692],{"class":403,"line":418},[401,683,667],{"class":666},[401,685,686],{"class":411}," vld_utoipa",[401,688,673],{"class":407},[401,690,691],{"class":411},"impl_to_schema",[401,693,694],{"class":407},";\n",[401,696,697],{"class":403,"line":470},[401,698,700],{"emptyLinePlaceholder":699},true,"\n",[401,702,703],{"class":403,"line":488},[401,704,705],{"class":484},"\u002F\u002F Nested type: registered as a component automatically.\n",[401,707,709,712,714,718],{"class":403,"line":708},5,[401,710,711],{"class":411},"vld",[401,713,673],{"class":407},[401,715,717],{"class":716},"s2Zo4","schema!",[401,719,720],{"class":407}," {\n",[401,722,724,727,730,733,736],{"class":403,"line":723},6,[401,725,726],{"class":407},"    #[",[401,728,729],{"class":421},"derive",[401,731,732],{"class":407},"(",[401,734,735],{"class":411},"Debug",[401,737,738],{"class":407},")]\n",[401,740,742,746,749,752],{"class":403,"line":741},7,[401,743,745],{"class":744},"spNyl","    pub",[401,747,748],{"class":744}," struct",[401,750,751],{"class":411}," Address",[401,753,720],{"class":407},[401,755,757,760,763,766,769,772,774,776,779,782,785,787,790,792,795,797,800],{"class":403,"line":756},8,[401,758,759],{"class":744},"        pub",[401,761,762],{"class":421}," city",[401,764,765],{"class":407},":",[401,767,768],{"class":411}," String",[401,770,771],{"class":407}," =>",[401,773,670],{"class":411},[401,775,673],{"class":407},[401,777,778],{"class":716},"string",[401,780,781],{"class":407},"().",[401,783,784],{"class":716},"min",[401,786,732],{"class":407},[401,788,789],{"class":666},"1",[401,791,650],{"class":407},[401,793,794],{"class":716},"max",[401,796,732],{"class":407},[401,798,799],{"class":666},"100",[401,801,802],{"class":407},"),\n",[401,804,806,808,811,813,815,817,819,821,823,825,827,829,831,833,835,837,840],{"class":403,"line":805},9,[401,807,759],{"class":744},[401,809,810],{"class":421}," zip",[401,812,765],{"class":407},[401,814,768],{"class":411},[401,816,771],{"class":407},[401,818,670],{"class":411},[401,820,673],{"class":407},[401,822,778],{"class":716},[401,824,781],{"class":407},[401,826,784],{"class":716},[401,828,732],{"class":407},[401,830,498],{"class":666},[401,832,650],{"class":407},[401,834,794],{"class":716},[401,836,732],{"class":407},[401,838,839],{"class":666},"10",[401,841,802],{"class":407},[401,843,845],{"class":403,"line":844},10,[401,846,847],{"class":407},"    }\n",[401,849,851],{"class":403,"line":850},11,[401,852,853],{"class":407},"}\n",[401,855,857,860,862,865],{"class":403,"line":856},12,[401,858,859],{"class":716},"impl_to_schema!",[401,861,732],{"class":407},[401,863,864],{"class":411},"Address",[401,866,867],{"class":407},");\n",[401,869,871],{"class":403,"line":870},13,[401,872,700],{"emptyLinePlaceholder":699},[401,874,876],{"class":403,"line":875},14,[401,877,878],{"class":484},"\u002F\u002F JSON body\n",[401,880,882,884,886,888],{"class":403,"line":881},15,[401,883,711],{"class":411},[401,885,673],{"class":407},[401,887,717],{"class":716},[401,889,720],{"class":407},[401,891,893,895,897,899,901],{"class":403,"line":892},16,[401,894,726],{"class":407},[401,896,729],{"class":421},[401,898,732],{"class":407},[401,900,735],{"class":411},[401,902,738],{"class":407},[401,904,906,908,910,913],{"class":403,"line":905},17,[401,907,745],{"class":744},[401,909,748],{"class":744},[401,911,912],{"class":411}," CreateUser",[401,914,720],{"class":407},[401,916,918,920,923,925,927,929,931,933,935,937,939,941,944,946,948,950,952],{"class":403,"line":917},18,[401,919,759],{"class":744},[401,921,922],{"class":421}," name",[401,924,765],{"class":407},[401,926,768],{"class":411},[401,928,771],{"class":407},[401,930,670],{"class":411},[401,932,673],{"class":407},[401,934,778],{"class":716},[401,936,781],{"class":407},[401,938,784],{"class":716},[401,940,732],{"class":407},[401,942,943],{"class":666},"2",[401,945,650],{"class":407},[401,947,794],{"class":716},[401,949,732],{"class":407},[401,951,799],{"class":666},[401,953,802],{"class":407},[401,955,957,959,962,964,966,968,970,972,974,976,979],{"class":403,"line":956},19,[401,958,759],{"class":744},[401,960,961],{"class":421}," email",[401,963,765],{"class":407},[401,965,768],{"class":411},[401,967,771],{"class":407},[401,969,670],{"class":411},[401,971,673],{"class":407},[401,973,778],{"class":716},[401,975,781],{"class":407},[401,977,978],{"class":716},"email",[401,980,981],{"class":407},"(),\n",[401,983,985,987,990,992,995,998,1001,1004,1006,1008,1010,1013,1015,1018,1020,1023,1025,1028,1030,1033],{"class":403,"line":984},20,[401,986,759],{"class":744},[401,988,989],{"class":421}," age",[401,991,765],{"class":407},[401,993,994],{"class":411}," Option",[401,996,997],{"class":407},"\u003C",[401,999,1000],{"class":411},"i64",[401,1002,1003],{"class":407},">",[401,1005,771],{"class":407},[401,1007,670],{"class":411},[401,1009,673],{"class":407},[401,1011,1012],{"class":716},"number",[401,1014,781],{"class":407},[401,1016,1017],{"class":716},"int",[401,1019,781],{"class":407},[401,1021,1022],{"class":716},"gte",[401,1024,732],{"class":407},[401,1026,1027],{"class":666},"0",[401,1029,650],{"class":407},[401,1031,1032],{"class":716},"optional",[401,1034,981],{"class":407},[401,1036,1038,1040,1043,1045,1047,1049,1051,1053,1056,1058,1060],{"class":403,"line":1037},21,[401,1039,759],{"class":744},[401,1041,1042],{"class":421}," address",[401,1044,765],{"class":407},[401,1046,751],{"class":411},[401,1048,771],{"class":407},[401,1050,670],{"class":411},[401,1052,673],{"class":407},[401,1054,1055],{"class":716},"nested!",[401,1057,732],{"class":407},[401,1059,864],{"class":411},[401,1061,802],{"class":407},[401,1063,1065],{"class":403,"line":1064},22,[401,1066,847],{"class":407},[401,1068,1070],{"class":403,"line":1069},23,[401,1071,853],{"class":407},[401,1073,1075,1077,1079,1082],{"class":403,"line":1074},24,[401,1076,859],{"class":716},[401,1078,732],{"class":407},[401,1080,1081],{"class":411},"CreateUser",[401,1083,867],{"class":407},[401,1085,1087],{"class":403,"line":1086},25,[401,1088,700],{"emptyLinePlaceholder":699},[401,1090,1092],{"class":403,"line":1091},26,[401,1093,1094],{"class":484},"\u002F\u002F Query parameters: the location comes from utoipa's own attribute.\n",[401,1096,1098,1100,1102,1104],{"class":403,"line":1097},27,[401,1099,711],{"class":411},[401,1101,673],{"class":407},[401,1103,717],{"class":716},[401,1105,720],{"class":407},[401,1107,1109,1111,1113,1115,1117],{"class":403,"line":1108},28,[401,1110,726],{"class":407},[401,1112,729],{"class":421},[401,1114,732],{"class":407},[401,1116,735],{"class":411},[401,1118,738],{"class":407},[401,1120,1122,1124,1127,1129,1132,1134,1137],{"class":403,"line":1121},29,[401,1123,726],{"class":407},[401,1125,1126],{"class":421},"into_params",[401,1128,732],{"class":407},[401,1130,1131],{"class":421},"parameter_in ",[401,1133,425],{"class":407},[401,1135,1136],{"class":411}," Query",[401,1138,738],{"class":407},[401,1140,1142,1144,1146,1149],{"class":403,"line":1141},30,[401,1143,745],{"class":744},[401,1145,748],{"class":744},[401,1147,1148],{"class":411}," SearchQuery",[401,1150,720],{"class":407},[401,1152,1154,1156,1159,1161,1163,1165,1167,1169,1171,1173,1175,1177,1179,1181,1183,1185,1188],{"class":403,"line":1153},31,[401,1155,759],{"class":744},[401,1157,1158],{"class":421}," q",[401,1160,765],{"class":407},[401,1162,768],{"class":411},[401,1164,771],{"class":407},[401,1166,670],{"class":411},[401,1168,673],{"class":407},[401,1170,778],{"class":716},[401,1172,781],{"class":407},[401,1174,784],{"class":716},[401,1176,732],{"class":407},[401,1178,789],{"class":666},[401,1180,650],{"class":407},[401,1182,794],{"class":716},[401,1184,732],{"class":407},[401,1186,1187],{"class":666},"200",[401,1189,802],{"class":407},[401,1191,1193],{"class":403,"line":1192},32,[401,1194,847],{"class":407},[401,1196,1198],{"class":403,"line":1197},33,[401,1199,853],{"class":407},[401,1201,1203,1205,1207,1210],{"class":403,"line":1202},34,[401,1204,859],{"class":716},[401,1206,732],{"class":407},[401,1208,1209],{"class":411},"SearchQuery",[401,1211,867],{"class":407},[401,1213,1215],{"class":403,"line":1214},35,[401,1216,700],{"emptyLinePlaceholder":699},[401,1218,1220,1223,1226,1228,1231,1233,1236,1238,1241,1243,1245,1248,1250,1252,1255,1257,1259,1262,1265,1268,1271,1273,1276],{"class":403,"line":1219},36,[401,1221,1222],{"class":407},"#[",[401,1224,1225],{"class":421},"utoipa",[401,1227,673],{"class":407},[401,1229,1230],{"class":421},"path",[401,1232,732],{"class":407},[401,1234,1235],{"class":421},"get",[401,1237,446],{"class":407},[401,1239,1240],{"class":421}," path ",[401,1242,425],{"class":407},[401,1244,436],{"class":407},[401,1246,1247],{"class":439},"\u002Fsearch",[401,1249,443],{"class":407},[401,1251,446],{"class":407},[401,1253,1254],{"class":421}," params",[401,1256,732],{"class":407},[401,1258,1209],{"class":411},[401,1260,1261],{"class":407},"),",[401,1263,1264],{"class":421}," responses",[401,1266,1267],{"class":407},"((",[401,1269,1270],{"class":421},"status ",[401,1272,425],{"class":407},[401,1274,1275],{"class":421}," 200",[401,1277,1278],{"class":407},")))]\n",[401,1280,1282,1285,1288,1291],{"class":403,"line":1281},37,[401,1283,1284],{"class":666},"fn",[401,1286,1287],{"class":716}," search_users",[401,1289,1290],{"class":407},"()",[401,1292,1293],{"class":407}," {}\n",[401,1295,1297],{"class":403,"line":1296},38,[401,1298,700],{"emptyLinePlaceholder":699},[401,1300,1302,1304,1306,1308,1310],{"class":403,"line":1301},39,[401,1303,1222],{"class":407},[401,1305,1225],{"class":421},[401,1307,673],{"class":407},[401,1309,1230],{"class":421},[401,1311,1312],{"class":407},"(\n",[401,1314,1316,1319],{"class":403,"line":1315},40,[401,1317,1318],{"class":421},"    post",[401,1320,1321],{"class":407},",\n",[401,1323,1325,1328,1330,1332,1335,1337],{"class":403,"line":1324},41,[401,1326,1327],{"class":421},"    path ",[401,1329,425],{"class":407},[401,1331,436],{"class":407},[401,1333,1334],{"class":439},"\u002Fusers",[401,1336,443],{"class":407},[401,1338,1321],{"class":407},[401,1340,1342,1345,1347,1349],{"class":403,"line":1341},42,[401,1343,1344],{"class":421},"    request_body ",[401,1346,425],{"class":407},[401,1348,912],{"class":411},[401,1350,1321],{"class":407},[401,1352,1354,1357,1359,1361,1363,1365,1367,1369,1371,1373,1376,1378,1381,1383,1385,1388,1390],{"class":403,"line":1353},43,[401,1355,1356],{"class":421},"    responses",[401,1358,1267],{"class":407},[401,1360,1270],{"class":421},[401,1362,425],{"class":407},[401,1364,1275],{"class":421},[401,1366,1261],{"class":407},[401,1368,362],{"class":407},[401,1370,1270],{"class":421},[401,1372,425],{"class":407},[401,1374,1375],{"class":421}," 422",[401,1377,446],{"class":407},[401,1379,1380],{"class":421}," description ",[401,1382,425],{"class":407},[401,1384,436],{"class":407},[401,1386,1387],{"class":439},"Validation failed",[401,1389,443],{"class":407},[401,1391,1392],{"class":407},")),\n",[401,1394,1396],{"class":403,"line":1395},44,[401,1397,738],{"class":407},[401,1399,1401,1403,1406,1408],{"class":403,"line":1400},45,[401,1402,1284],{"class":666},[401,1404,1405],{"class":716}," create_user",[401,1407,1290],{"class":407},[401,1409,1293],{"class":407},[401,1411,1413],{"class":403,"line":1412},46,[401,1414,700],{"emptyLinePlaceholder":699},[401,1416,1418],{"class":403,"line":1417},47,[401,1419,1420],{"class":484},"\u002F\u002F Address is not listed: it is collected through ToSchema::schemas().\n",[401,1422,1424,1426,1428,1430,1432,1434,1437],{"class":403,"line":1423},48,[401,1425,1222],{"class":407},[401,1427,729],{"class":421},[401,1429,732],{"class":407},[401,1431,1225],{"class":421},[401,1433,673],{"class":407},[401,1435,1436],{"class":411},"OpenApi",[401,1438,738],{"class":407},[401,1440,1442,1444,1446,1448,1451,1453,1456,1458,1460,1462,1465,1467,1470,1472,1474],{"class":403,"line":1441},49,[401,1443,1222],{"class":407},[401,1445,459],{"class":421},[401,1447,732],{"class":407},[401,1449,1450],{"class":421},"paths",[401,1452,732],{"class":407},[401,1454,1455],{"class":421},"create_user",[401,1457,446],{"class":407},[401,1459,1287],{"class":421},[401,1461,1261],{"class":407},[401,1463,1464],{"class":421}," components",[401,1466,732],{"class":407},[401,1468,1469],{"class":421},"schemas",[401,1471,732],{"class":407},[401,1473,1081],{"class":411},[401,1475,1278],{"class":407},[401,1477,1479,1482,1485],{"class":403,"line":1478},50,[401,1480,1481],{"class":744},"struct",[401,1483,1484],{"class":411}," ApiDoc",[401,1486,694],{"class":407},[341,1488,1489,1490,1492,1493,380,1496,1499],{},"The same macro works on ",[344,1491,84],{}," structs; serde ",[344,1494,1495],{},"rename",[344,1497,1498],{},"rename_all"," are reflected in the property names:",[391,1501,1503],{"className":657,"code":1502,"language":659,"meta":397,"style":397},"#[derive(Debug, serde::Deserialize, vld::Validate)]\n#[serde(rename_all = \"camelCase\")]\nstruct UpdateLocation {\n    #[vld(vld::string().min(1).max(255))]\n    street_address: String,\n    #[vld(vld::boolean())]\n    is_active: bool,\n}\n\nvld_utoipa::impl_to_schema!(UpdateLocation); \u002F\u002F properties: streetAddress, isActive\n",[344,1504,1505,1536,1559,1568,1602,1613,1631,1643,1647,1651],{"__ignoreMap":397},[401,1506,1507,1509,1511,1513,1515,1517,1520,1522,1525,1527,1529,1531,1534],{"class":403,"line":404},[401,1508,1222],{"class":407},[401,1510,729],{"class":421},[401,1512,732],{"class":407},[401,1514,735],{"class":411},[401,1516,446],{"class":407},[401,1518,1519],{"class":421}," serde",[401,1521,673],{"class":407},[401,1523,1524],{"class":411},"Deserialize",[401,1526,446],{"class":407},[401,1528,670],{"class":421},[401,1530,673],{"class":407},[401,1532,1533],{"class":411},"Validate",[401,1535,738],{"class":407},[401,1537,1538,1540,1543,1545,1548,1550,1552,1555,1557],{"class":403,"line":418},[401,1539,1222],{"class":407},[401,1541,1542],{"class":421},"serde",[401,1544,732],{"class":407},[401,1546,1547],{"class":421},"rename_all ",[401,1549,425],{"class":407},[401,1551,436],{"class":407},[401,1553,1554],{"class":439},"camelCase",[401,1556,443],{"class":407},[401,1558,738],{"class":407},[401,1560,1561,1563,1566],{"class":403,"line":470},[401,1562,1481],{"class":744},[401,1564,1565],{"class":411}," UpdateLocation",[401,1567,720],{"class":407},[401,1569,1570,1572,1574,1576,1578,1580,1582,1584,1586,1588,1590,1592,1594,1596,1599],{"class":403,"line":488},[401,1571,726],{"class":407},[401,1573,711],{"class":421},[401,1575,732],{"class":407},[401,1577,711],{"class":421},[401,1579,673],{"class":407},[401,1581,778],{"class":421},[401,1583,781],{"class":407},[401,1585,784],{"class":421},[401,1587,732],{"class":407},[401,1589,789],{"class":421},[401,1591,650],{"class":407},[401,1593,794],{"class":421},[401,1595,732],{"class":407},[401,1597,1598],{"class":421},"255",[401,1600,1601],{"class":407},"))]\n",[401,1603,1604,1607,1609,1611],{"class":403,"line":708},[401,1605,1606],{"class":421},"    street_address",[401,1608,765],{"class":407},[401,1610,768],{"class":411},[401,1612,1321],{"class":407},[401,1614,1615,1617,1619,1621,1623,1625,1628],{"class":403,"line":723},[401,1616,726],{"class":407},[401,1618,711],{"class":421},[401,1620,732],{"class":407},[401,1622,711],{"class":421},[401,1624,673],{"class":407},[401,1626,1627],{"class":421},"boolean",[401,1629,1630],{"class":407},"())]\n",[401,1632,1633,1636,1638,1641],{"class":403,"line":741},[401,1634,1635],{"class":421},"    is_active",[401,1637,765],{"class":407},[401,1639,1640],{"class":411}," bool",[401,1642,1321],{"class":407},[401,1644,1645],{"class":403,"line":756},[401,1646,853],{"class":407},[401,1648,1649],{"class":403,"line":805},[401,1650,700],{"emptyLinePlaceholder":699},[401,1652,1653,1656,1658,1660,1662,1665,1668],{"class":403,"line":844},[401,1654,1655],{"class":411},"vld_utoipa",[401,1657,673],{"class":407},[401,1659,859],{"class":716},[401,1661,732],{"class":407},[401,1663,1664],{"class":411},"UpdateLocation",[401,1666,1667],{"class":407},");",[401,1669,1670],{"class":484}," \u002F\u002F properties: streetAddress, isActive\n",[386,1672,1674],{"id":1673},"api","API",[584,1676,1677,1686],{},[587,1678,1679],{},[590,1680,1681,1684],{},[593,1682,1683],{},"Item",[593,1685,601],{},[603,1687,1688,1708,1718,1731,1745,1770,1779],{},[590,1689,1690,1695],{},[608,1691,1692],{},[344,1693,1694],{},"impl_to_schema!(T)",[608,1696,1697,1699,1700,1699,1702,1704,1705],{},[344,1698,349],{}," + ",[344,1701,353],{},[344,1703,357],{}," for ",[344,1706,1707],{},"T",[590,1709,1710,1715],{},[608,1711,1712],{},[344,1713,1714],{},"impl_to_schema!(T, \"Name\")",[608,1716,1717],{},"Same, with a custom component name",[590,1719,1720,1725],{},[608,1721,1722],{},[344,1723,1724],{},"json_schema_to_schema(&Value)",[608,1726,1727,1728],{},"JSON Schema value → ",[344,1729,1730],{},"utoipa::openapi::RefOr\u003CSchema>",[590,1732,1733,1738],{},[608,1734,1735],{},[344,1736,1737],{},"json_schema_to_params(&Value, ParameterIn)",[608,1739,1740,1741,1744],{},"Object schema → ",[344,1742,1743],{},"Vec\u003CParameter>"," (one per property)",[590,1746,1747,1752],{},[608,1748,1749],{},[344,1750,1751],{},"parameter_in_from_str(&str)",[608,1753,1754,380,1757,380,1760,380,1763,1766,1767],{},[344,1755,1756],{},"\"query\"",[344,1758,1759],{},"\"path\"",[344,1761,1762],{},"\"header\"",[344,1764,1765],{},"\"cookie\""," → ",[344,1768,1769],{},"ParameterIn",[590,1771,1772,1776],{},[608,1773,1774],{},[344,1775,1225],{},[608,1777,1778],{},"Re-export of the selected utoipa major",[590,1780,1781,1785],{},[608,1782,1783],{},[344,1784,676],{},[608,1786,1787,1788],{},"The macros and functions above plus ",[344,1789,1790],{},"vld::prelude::*",[341,1792,1793,1796,1797,1800,1801,637],{},[344,1794,1795],{},"impl_to_schema!(T, query | path | header | cookie)"," sets the parameter location without the attribute; prefer ",[344,1798,1799],{},"#[into_params(parameter_in = …)]"," on the struct and ",[344,1802,1694],{},[386,1804,1806],{"id":1805},"gotchas","Gotchas",[1808,1809,1810,1823,1847,1861,1897,1915],"ul",{},[1811,1812,1813,1815,1816,1819,1820,1822],"li",{},[344,1814,357],{}," returns no parameters unless a location is known: utoipa's own ",[344,1817,1818],{},"params(...)"," provider, a legacy macro override, or ",[344,1821,1799],{}," on the struct (checked in that order).",[1811,1824,1825,1826,1829,1830,1832,1833,350,1836,354,1839,1842,1843,1846],{},"Parameter ",[344,1827,1828],{},"required"," follows the object's ",[344,1831,1828],{}," array: ",[344,1834,1835],{},".optional()",[344,1837,1838],{},".nullish()",[344,1840,1841],{},".with_default()"," fields are optional, ",[344,1844,1845],{},".nullable()"," fields stay required.",[1811,1848,1849,1850,1853,1854,1856,1857,1860],{},"Nested ",[344,1851,1852],{},"vld::nested!"," types are registered transitively (grandchildren too). The nested type itself still needs ",[344,1855,859],{}," if you reference it in ",[344,1858,1859],{},"#[utoipa::path]"," directly.",[1811,1862,1863,1864,350,1867,350,1870,350,1873,1876,1877,1880,1881,1884,1885,380,1888,380,1891,1893,1894,637],{},"Keywords utoipa has no field for (",[344,1865,1866],{},"contains",[344,1868,1869],{},"propertyNames",[344,1871,1872],{},"formatMinimum",[344,1874,1875],{},"not",", …) and vld's ",[344,1878,1879],{},"x-*"," extensions are kept as schema extensions; ",[344,1882,1883],{},"$ref","s with ",[344,1886,1887],{},"title",[344,1889,1890],{},"default",[344,1892,653],{}," are wrapped in a single-item ",[344,1895,1896],{},"allOf",[1811,1898,1899,1900,354,1902,1904,1905,1907,1908,1910,1911,1914],{},"utoipa's ",[344,1901,1859],{},[344,1903,1436],{}," derive expect the crate to be named ",[344,1906,1225],{},"; with ",[344,1909,559],{}," add ",[344,1912,1913],{},"utoipa = \"6\""," under that name.",[1811,1916,1917],{},"Use one struct per HTTP role (body, query, path). OpenAPI describes them differently.",[341,1919,1920,1921,1924],{},"See also ",[648,1922,1923],{"href":129},"JSON Schema"," for what vld emits.",[1926,1927,1928],"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 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}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 .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}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}",{"title":397,"searchDepth":418,"depth":470,"links":1930},[1931,1932,1933,1934,1935],{"id":388,"depth":418,"text":389},{"id":581,"depth":418,"text":582},{"id":653,"depth":418,"text":654},{"id":1673,"depth":418,"text":1674},{"id":1805,"depth":418,"text":1806},"Use vld schemas as utoipa ToSchema \u002F IntoParams types, so validation rules and OpenAPI docs come from one definition.","md",[1939,1944],{"label":1940,"icon":1941,"to":1942,"target":1943},"crates.io","i-simple-icons-rust","https:\u002F\u002Fcrates.io\u002Fcrates\u002Fvld-utoipa","_blank",{"label":1945,"icon":307,"to":1946,"target":1943},"docs.rs","https:\u002F\u002Fdocs.rs\u002Fvld-utoipa",{},{"title":198,"description":1936},"AmcBshtZfAhWtJqb5neG9q15b-Adiq9KPPtRTmjpCO8",[1951,1953],{"title":188,"path":189,"stem":190,"description":1952,"children":-1},"Validate tonic gRPC messages and metadata with vld schemas.",{"title":202,"path":203,"stem":204,"description":1954,"children":-1},"Two-way bridge between vld and schemars - vld types as schemars::JsonSchema, and schemars types validated through vld.",1794036361891]