[{"data":1,"prerenderedAt":1279},["ShallowReactive",2],{"navigation":3,"\u002Fintegrations\u002Fconfig-cli\u002Fclap":335,"\u002Fintegrations\u002Fconfig-cli\u002Fclap-surround":1274},[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":270,"body":337,"description":1260,"extension":1261,"links":1262,"meta":1271,"navigation":600,"path":271,"seo":1272,"stem":272,"__hash__":1273},"docs\u002F6.integrations\u002F6.config-cli\u002F2.clap.md",{"type":338,"value":339,"toc":1254},"minimark",[340,355,360,531,538,542,992,998,1006,1013,1017,1178,1182,1250],[341,342,343,344,347,348,351,352,354],"p",{},"clap checks types, defaults and required arguments; ",[345,346,270],"code",{}," adds value rules (formats, ranges, lengths) after ",[345,349,350],{},"Cli::parse()",". The rules sit on the clap struct itself through ",[345,353,84],{},", so there is no second schema.",[356,357,359],"h2",{"id":358},"install","Install",[361,362,368],"pre",{"className":363,"code":364,"filename":365,"language":366,"meta":367,"style":367},"language-toml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","[dependencies]\nvld = { version = \"0.5\", features = [\"derive\"] }\nvld-clap = \"0.5\"\nclap = { version = \"4\", features = [\"derive\"] }\nserde = { version = \"1\", features = [\"derive\"] }\n","Cargo.toml","toml","",[345,369,370,386,438,453,492],{"__ignoreMap":367},[371,372,375,379,383],"span",{"class":373,"line":374},"line",1,[371,376,378],{"class":377},"sMK4o","[",[371,380,382],{"class":381},"sBMFI","dependencies",[371,384,385],{"class":377},"]\n",[371,387,389,393,396,399,402,404,407,411,414,417,420,422,425,427,430,432,435],{"class":373,"line":388},2,[371,390,392],{"class":391},"sTEyZ","vld ",[371,394,395],{"class":377},"=",[371,397,398],{"class":377}," {",[371,400,401],{"class":391}," version ",[371,403,395],{"class":377},[371,405,406],{"class":377}," \"",[371,408,410],{"class":409},"sfazB","0.5",[371,412,413],{"class":377},"\"",[371,415,416],{"class":377},",",[371,418,419],{"class":391}," features ",[371,421,395],{"class":377},[371,423,424],{"class":377}," [",[371,426,413],{"class":377},[371,428,429],{"class":409},"derive",[371,431,413],{"class":377},[371,433,434],{"class":377},"]",[371,436,437],{"class":377}," }\n",[371,439,441,444,446,448,450],{"class":373,"line":440},3,[371,442,443],{"class":391},"vld-clap ",[371,445,395],{"class":377},[371,447,406],{"class":377},[371,449,410],{"class":409},[371,451,452],{"class":377},"\"\n",[371,454,456,459,461,463,465,467,469,472,474,476,478,480,482,484,486,488,490],{"class":373,"line":455},4,[371,457,458],{"class":391},"clap ",[371,460,395],{"class":377},[371,462,398],{"class":377},[371,464,401],{"class":391},[371,466,395],{"class":377},[371,468,406],{"class":377},[371,470,471],{"class":409},"4",[371,473,413],{"class":377},[371,475,416],{"class":377},[371,477,419],{"class":391},[371,479,395],{"class":377},[371,481,424],{"class":377},[371,483,413],{"class":377},[371,485,429],{"class":409},[371,487,413],{"class":377},[371,489,434],{"class":377},[371,491,437],{"class":377},[371,493,495,498,500,502,504,506,508,511,513,515,517,519,521,523,525,527,529],{"class":373,"line":494},5,[371,496,497],{"class":391},"serde ",[371,499,395],{"class":377},[371,501,398],{"class":377},[371,503,401],{"class":391},[371,505,395],{"class":377},[371,507,406],{"class":377},[371,509,510],{"class":409},"1",[371,512,413],{"class":377},[371,514,416],{"class":377},[371,516,419],{"class":391},[371,518,395],{"class":377},[371,520,424],{"class":377},[371,522,413],{"class":377},[371,524,429],{"class":409},[371,526,413],{"class":377},[371,528,434],{"class":377},[371,530,437],{"class":377},[341,532,533,534,537],{},"No optional features. Requires clap 4. MSRV: 1.85 (see ",[535,536,23],"a",{"href":24},").",[356,539,541],{"id":540},"example","Example",[361,543,547],{"className":544,"code":545,"language":546,"meta":367,"style":367},"language-rust shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","use clap::Parser;\nuse vld::Validate;\nuse vld_clap::prelude::*;\n\n#[derive(Parser, Debug, serde::Serialize, Validate)]\n#[command(name = \"myapp\")]\nstruct Cli {\n    \u002F\u002F\u002F Admin email address\n    #[arg(long)]\n    #[vld(vld::string().email())]\n    email: String,\n\n    \u002F\u002F\u002F Server port\n    #[arg(long, default_value_t = 8080)]\n    #[vld(vld::number().int().min(1).max(65535))]\n    port: i64,\n\n    \u002F\u002F\u002F Output file\n    #[arg(long = \"out\")]\n    #[vld(vld::string().min(1))]\n    output_file: String,\n}\n\nfn main() {\n    let cli = Cli::parse();   \u002F\u002F clap's parse\n    validate_or_exit(&cli);   \u002F\u002F vld rules; prints and exits with code 2 on failure\n    println!(\"{cli:?}\");\n}\n","rust",[345,548,549,567,581,596,602,637,661,674,681,697,723,738,743,749,772,815,828,833,839,862,887,899,905,910,925,949,967,987],{"__ignoreMap":367},[371,550,551,555,558,561,564],{"class":373,"line":374},[371,552,554],{"class":553},"sbssI","use",[371,556,557],{"class":381}," clap",[371,559,560],{"class":377},"::",[371,562,563],{"class":381},"Parser",[371,565,566],{"class":377},";\n",[371,568,569,571,574,576,579],{"class":373,"line":388},[371,570,554],{"class":553},[371,572,573],{"class":381}," vld",[371,575,560],{"class":377},[371,577,578],{"class":381},"Validate",[371,580,566],{"class":377},[371,582,583,585,588,590,593],{"class":373,"line":440},[371,584,554],{"class":553},[371,586,587],{"class":381}," vld_clap",[371,589,560],{"class":377},[371,591,592],{"class":381},"prelude",[371,594,595],{"class":377},"::*;\n",[371,597,598],{"class":373,"line":455},[371,599,601],{"emptyLinePlaceholder":600},true,"\n",[371,603,604,607,609,612,614,616,619,621,624,626,629,631,634],{"class":373,"line":494},[371,605,606],{"class":377},"#[",[371,608,429],{"class":391},[371,610,611],{"class":377},"(",[371,613,563],{"class":381},[371,615,416],{"class":377},[371,617,618],{"class":381}," Debug",[371,620,416],{"class":377},[371,622,623],{"class":391}," serde",[371,625,560],{"class":377},[371,627,628],{"class":381},"Serialize",[371,630,416],{"class":377},[371,632,633],{"class":381}," Validate",[371,635,636],{"class":377},")]\n",[371,638,640,642,645,647,650,652,654,657,659],{"class":373,"line":639},6,[371,641,606],{"class":377},[371,643,644],{"class":391},"command",[371,646,611],{"class":377},[371,648,649],{"class":391},"name ",[371,651,395],{"class":377},[371,653,406],{"class":377},[371,655,656],{"class":409},"myapp",[371,658,413],{"class":377},[371,660,636],{"class":377},[371,662,664,668,671],{"class":373,"line":663},7,[371,665,667],{"class":666},"spNyl","struct",[371,669,670],{"class":381}," Cli",[371,672,673],{"class":377}," {\n",[371,675,677],{"class":373,"line":676},8,[371,678,680],{"class":679},"sHwdD","    \u002F\u002F\u002F Admin email address\n",[371,682,684,687,690,692,695],{"class":373,"line":683},9,[371,685,686],{"class":377},"    #[",[371,688,689],{"class":391},"arg",[371,691,611],{"class":377},[371,693,694],{"class":391},"long",[371,696,636],{"class":377},[371,698,700,702,705,707,709,711,714,717,720],{"class":373,"line":699},10,[371,701,686],{"class":377},[371,703,704],{"class":391},"vld",[371,706,611],{"class":377},[371,708,704],{"class":391},[371,710,560],{"class":377},[371,712,713],{"class":391},"string",[371,715,716],{"class":377},"().",[371,718,719],{"class":391},"email",[371,721,722],{"class":377},"())]\n",[371,724,726,729,732,735],{"class":373,"line":725},11,[371,727,728],{"class":391},"    email",[371,730,731],{"class":377},":",[371,733,734],{"class":381}," String",[371,736,737],{"class":377},",\n",[371,739,741],{"class":373,"line":740},12,[371,742,601],{"emptyLinePlaceholder":600},[371,744,746],{"class":373,"line":745},13,[371,747,748],{"class":679},"    \u002F\u002F\u002F Server port\n",[371,750,752,754,756,758,760,762,765,767,770],{"class":373,"line":751},14,[371,753,686],{"class":377},[371,755,689],{"class":391},[371,757,611],{"class":377},[371,759,694],{"class":391},[371,761,416],{"class":377},[371,763,764],{"class":391}," default_value_t ",[371,766,395],{"class":377},[371,768,769],{"class":391}," 8080",[371,771,636],{"class":377},[371,773,775,777,779,781,783,785,788,790,793,795,798,800,802,804,807,809,812],{"class":373,"line":774},15,[371,776,686],{"class":377},[371,778,704],{"class":391},[371,780,611],{"class":377},[371,782,704],{"class":391},[371,784,560],{"class":377},[371,786,787],{"class":391},"number",[371,789,716],{"class":377},[371,791,792],{"class":391},"int",[371,794,716],{"class":377},[371,796,797],{"class":391},"min",[371,799,611],{"class":377},[371,801,510],{"class":391},[371,803,537],{"class":377},[371,805,806],{"class":391},"max",[371,808,611],{"class":377},[371,810,811],{"class":391},"65535",[371,813,814],{"class":377},"))]\n",[371,816,818,821,823,826],{"class":373,"line":817},16,[371,819,820],{"class":391},"    port",[371,822,731],{"class":377},[371,824,825],{"class":381}," i64",[371,827,737],{"class":377},[371,829,831],{"class":373,"line":830},17,[371,832,601],{"emptyLinePlaceholder":600},[371,834,836],{"class":373,"line":835},18,[371,837,838],{"class":679},"    \u002F\u002F\u002F Output file\n",[371,840,842,844,846,848,851,853,855,858,860],{"class":373,"line":841},19,[371,843,686],{"class":377},[371,845,689],{"class":391},[371,847,611],{"class":377},[371,849,850],{"class":391},"long ",[371,852,395],{"class":377},[371,854,406],{"class":377},[371,856,857],{"class":409},"out",[371,859,413],{"class":377},[371,861,636],{"class":377},[371,863,865,867,869,871,873,875,877,879,881,883,885],{"class":373,"line":864},20,[371,866,686],{"class":377},[371,868,704],{"class":391},[371,870,611],{"class":377},[371,872,704],{"class":391},[371,874,560],{"class":377},[371,876,713],{"class":391},[371,878,716],{"class":377},[371,880,797],{"class":391},[371,882,611],{"class":377},[371,884,510],{"class":391},[371,886,814],{"class":377},[371,888,890,893,895,897],{"class":373,"line":889},21,[371,891,892],{"class":391},"    output_file",[371,894,731],{"class":377},[371,896,734],{"class":381},[371,898,737],{"class":377},[371,900,902],{"class":373,"line":901},22,[371,903,904],{"class":377},"}\n",[371,906,908],{"class":373,"line":907},23,[371,909,601],{"emptyLinePlaceholder":600},[371,911,913,916,920,923],{"class":373,"line":912},24,[371,914,915],{"class":553},"fn",[371,917,919],{"class":918},"s2Zo4"," main",[371,921,922],{"class":377},"()",[371,924,673],{"class":377},[371,926,928,931,934,936,938,940,943,946],{"class":373,"line":927},25,[371,929,930],{"class":666},"    let",[371,932,933],{"class":391}," cli ",[371,935,395],{"class":377},[371,937,670],{"class":381},[371,939,560],{"class":377},[371,941,942],{"class":918},"parse",[371,944,945],{"class":377},"();",[371,947,948],{"class":679},"   \u002F\u002F clap's parse\n",[371,950,952,955,958,961,964],{"class":373,"line":951},26,[371,953,954],{"class":918},"    validate_or_exit",[371,956,957],{"class":377},"(&",[371,959,960],{"class":391},"cli",[371,962,963],{"class":377},");",[371,965,966],{"class":679},"   \u002F\u002F vld rules; prints and exits with code 2 on failure\n",[371,968,970,973,975,978,981,984],{"class":373,"line":969},27,[371,971,972],{"class":918},"    println!",[371,974,611],{"class":377},[371,976,977],{"class":377},"\"{",[371,979,980],{"class":409},"cli:?",[371,982,983],{"class":377},"}\"",[371,985,986],{"class":377},");\n",[371,988,990],{"class":373,"line":989},28,[371,991,904],{"class":377},[341,993,994,997],{},[345,995,996],{},"myapp --email nope --port 0 --out report.txt"," prints:",[361,999,1004],{"className":1000,"code":1002,"language":1003},[1001],"language-text","error: Invalid arguments:\n       --email: Invalid email address\n       --port: Number must be at least 1\n","text",[345,1005,1002],{"__ignoreMap":367},[341,1007,1008,1009,1012],{},"(Message wording comes from vld's ",[535,1010,1011],{"href":115},"message table",".)",[356,1014,1016],{"id":1015},"api","API",[1018,1019,1020,1033],"table",{},[1021,1022,1023],"thead",{},[1024,1025,1026,1030],"tr",{},[1027,1028,1029],"th",{},"Item",[1027,1031,1032],{},"Description",[1034,1035,1036,1065,1078,1096,1109,1125,1147,1163],"tbody",{},[1024,1037,1038,1044],{},[1039,1040,1041],"td",{},[345,1042,1043],{},"validate_cli(&args)",[1039,1045,1046,1047,1049,1050,1053,1054,1057,1058,1057,1061,1064],{},"Validate a ",[345,1048,563],{}," \u002F ",[345,1051,1052],{},"CommandFactory"," type; issue lines use clap's names (",[345,1055,1056],{},"--out",", ",[345,1059,1060],{},"-o",[345,1062,1063],{},"\u003CINPUT>",")",[1024,1066,1067,1072],{},[1039,1068,1069],{},[345,1070,1071],{},"validate_or_exit(&args)",[1039,1073,1074,1077],{},[345,1075,1076],{},"validate_cli",", print to stderr and exit with code 2 on error",[1024,1079,1080,1085],{},[1039,1081,1082],{},[345,1083,1084],{},"validate(&args)",[1039,1086,1087,1088,1091,1092,1095],{},"Any ",[345,1089,1090],{},"VldParse + Serialize"," type; names guessed as ",[345,1093,1094],{},"--kebab-case"," from the field",[1024,1097,1098,1103],{},[1039,1099,1100],{},[345,1101,1102],{},"validate_json::\u003CS>(&Value)",[1039,1104,1105,1106],{},"Parse a JSON value with schema ",[345,1107,1108],{},"S",[1024,1110,1111,1116],{},[1039,1112,1113],{},[345,1114,1115],{},"validate_with_schema::\u003CS, T>(&args)",[1039,1117,1118,1119,1122,1123],{},"Serialize ",[345,1120,1121],{},"T",", parse with a separate schema ",[345,1124,1108],{},[1024,1126,1127,1132],{},[1039,1128,1129],{},[345,1130,1131],{},"VldClapError",[1039,1133,1134,1057,1137,1140,1141,1057,1144],{},[345,1135,1136],{},"source: ErrorSource",[345,1138,1139],{},"message: String","; ",[345,1142,1143],{},"exit()",[345,1145,1146],{},"format_issues()",[1024,1148,1149,1154],{},[1039,1150,1151],{},[345,1152,1153],{},"ErrorSource",[1039,1155,1156,1159,1160],{},[345,1157,1158],{},"Validation(VldError)"," or ",[345,1161,1162],{},"Serialization(String)",[1024,1164,1165,1169],{},[1039,1166,1167],{},[345,1168,592],{},[1039,1170,1171,1172,1174,1175],{},"The functions and ",[345,1173,1131],{},", plus ",[345,1176,1177],{},"vld::prelude::*",[356,1179,1181],{"id":1180},"gotchas","Gotchas",[1183,1184,1185,1205,1216,1239],"ul",{},[1186,1187,1188,1190,1191,1194,1195,1198,1199,1202,1203,537],"li",{},[345,1189,84],{}," generates ",[345,1192,1193],{},"vld_parse()",", not ",[345,1196,1197],{},"parse()",", so it does not clash with ",[345,1200,1201],{},"clap::Parser::parse"," (see ",[535,1204,429],{"href":85},[1186,1206,1207,1208,1211,1212,1215],{},"The struct is serialized to JSON before validation: derive ",[345,1209,1210],{},"serde::Serialize",", and keep ",[345,1213,1214],{},"#[serde(rename)]"," in mind, since the issue path is the serialized name.",[1186,1217,1218,1222,1223,1226,1227,1230,1231,1234,1235,1238],{},[1219,1220,1221],"strong",{},"0.5 change",": ",[345,1224,1225],{},"validate_or_exit"," requires ",[345,1228,1229],{},"clap::CommandFactory"," (any ",[345,1232,1233],{},"#[derive(Parser)]"," has it). For plain structs call ",[345,1236,1237],{},"validate",".",[1186,1240,1241,1242,1245,1246,1249],{},"Nested ",[345,1243,1244],{},"#[command(flatten)]"," groups and subcommand arguments are looked up in the clap ",[345,1247,1248],{},"Command",", so their flags are named correctly too.",[1251,1252,1253],"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 .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}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}",{"title":367,"searchDepth":388,"depth":440,"links":1255},[1256,1257,1258,1259],{"id":358,"depth":388,"text":359},{"id":540,"depth":388,"text":541},{"id":1015,"depth":388,"text":1016},{"id":1180,"depth":388,"text":1181},"Validate clap-parsed CLI arguments with","md",[1263,1268],{"label":1264,"icon":1265,"to":1266,"target":1267},"crates.io","i-simple-icons-rust","https:\u002F\u002Fcrates.io\u002Fcrates\u002Fvld-clap","_blank",{"label":1269,"icon":307,"to":1270,"target":1267},"docs.rs","https:\u002F\u002Fdocs.rs\u002Fvld-clap",{},{"title":270,"description":1260},"nrHQN3wqsyB7BaAcj7PD2xS9pSrcztEaS3ehTYPv6IE",[1275,1277],{"title":266,"path":267,"stem":268,"description":1276,"children":-1},"Validate configuration loaded with config-rs or figment against a vld schema, with every invalid key reported at startup.",{"title":280,"path":281,"stem":282,"description":1278,"children":-1},"Shared validation for Dioxus server functions and WASM clients, without a dioxus dependency.",1794036362860]