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