[{"data":1,"prerenderedAt":1581},["ShallowReactive",2],{"navigation":3,"\u002Fintegrations\u002Fconfig-cli\u002Fconfig":335,"\u002Fintegrations\u002Fconfig-cli\u002Fconfig-surround":1576},[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":266,"body":337,"description":1562,"extension":1563,"links":1564,"meta":1573,"navigation":684,"path":267,"seo":1574,"stem":268,"__hash__":1575},"docs\u002F6.integrations\u002F6.config-cli\u002F1.config.md",{"type":338,"value":339,"toc":1555},"minimark",[340,369,374,454,457,571,575,635,645,651,655,1153,1156,1334,1338,1455,1476,1480,1551],[341,342,343,346,347,354,355,360,361,364,365,368],"p",{},[344,345,266],"code",{}," takes the merged configuration from ",[348,349,353],"a",{"href":350,"rel":351},"https:\u002F\u002Fdocs.rs\u002Fconfig",[352],"nofollow","config-rs"," or ",[348,356,359],{"href":357,"rel":358},"https:\u002F\u002Fdocs.rs\u002Ffigment",[352],"figment"," (TOML, JSON, YAML, env, defaults), turns it into a ",[344,362,363],{},"serde_json::Value"," and parses it with your vld schema. You get a typed settings struct or a ",[344,366,367],{},"VldError"," listing every bad key.",[370,371,373],"h2",{"id":372},"install","Install",[375,376,382],"pre",{"className":377,"code":378,"filename":379,"language":380,"meta":381,"style":381},"language-toml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","[dependencies]\nvld = \"0.5\"\nvld-config = \"0.5\"   # config-rs backend\nconfig = \"0.15\"\n","Cargo.toml","toml","",[344,383,384,400,420,439],{"__ignoreMap":381},[385,386,389,393,397],"span",{"class":387,"line":388},"line",1,[385,390,392],{"class":391},"sMK4o","[",[385,394,396],{"class":395},"sBMFI","dependencies",[385,398,399],{"class":391},"]\n",[385,401,403,407,410,413,417],{"class":387,"line":402},2,[385,404,406],{"class":405},"sTEyZ","vld ",[385,408,409],{"class":391},"=",[385,411,412],{"class":391}," \"",[385,414,416],{"class":415},"sfazB","0.5",[385,418,419],{"class":391},"\"\n",[385,421,423,426,428,430,432,435],{"class":387,"line":422},3,[385,424,425],{"class":405},"vld-config ",[385,427,409],{"class":391},[385,429,412],{"class":391},[385,431,416],{"class":415},[385,433,434],{"class":391},"\"",[385,436,438],{"class":437},"sHwdD","   # config-rs backend\n",[385,440,442,445,447,449,452],{"class":387,"line":441},4,[385,443,444],{"class":405},"config ",[385,446,409],{"class":391},[385,448,412],{"class":391},[385,450,451],{"class":415},"0.15",[385,453,419],{"class":391},[341,455,456],{},"figment instead (or as well):",[375,458,460],{"className":377,"code":459,"filename":379,"language":380,"meta":381,"style":381},"[dependencies]\nvld-config = { version = \"0.5\", default-features = false, features = [\"figment\"] }\nfigment = { version = \"0.10\", features = [\"toml\", \"env\"] }\n",[344,461,462,470,524],{"__ignoreMap":381},[385,463,464,466,468],{"class":387,"line":388},[385,465,392],{"class":391},[385,467,396],{"class":395},[385,469,399],{"class":391},[385,471,472,474,476,479,482,484,486,488,490,493,496,498,502,504,507,509,512,514,516,518,521],{"class":387,"line":402},[385,473,425],{"class":405},[385,475,409],{"class":391},[385,477,478],{"class":391}," {",[385,480,481],{"class":405}," version ",[385,483,409],{"class":391},[385,485,412],{"class":391},[385,487,416],{"class":415},[385,489,434],{"class":391},[385,491,492],{"class":391},",",[385,494,495],{"class":405}," default-features ",[385,497,409],{"class":391},[385,499,501],{"class":500},"sfNiH"," false",[385,503,492],{"class":391},[385,505,506],{"class":405}," features ",[385,508,409],{"class":391},[385,510,511],{"class":391}," [",[385,513,434],{"class":391},[385,515,359],{"class":415},[385,517,434],{"class":391},[385,519,520],{"class":391},"]",[385,522,523],{"class":391}," }\n",[385,525,526,529,531,533,535,537,539,542,544,546,548,550,552,554,556,558,560,562,565,567,569],{"class":387,"line":422},[385,527,528],{"class":405},"figment ",[385,530,409],{"class":391},[385,532,478],{"class":391},[385,534,481],{"class":405},[385,536,409],{"class":391},[385,538,412],{"class":391},[385,540,541],{"class":415},"0.10",[385,543,434],{"class":391},[385,545,492],{"class":391},[385,547,506],{"class":405},[385,549,409],{"class":391},[385,551,511],{"class":391},[385,553,434],{"class":391},[385,555,380],{"class":415},[385,557,434],{"class":391},[385,559,492],{"class":391},[385,561,412],{"class":391},[385,563,564],{"class":415},"env",[385,566,434],{"class":391},[385,568,520],{"class":391},[385,570,523],{"class":391},[370,572,574],{"id":573},"features","Features",[576,577,578,594],"table",{},[579,580,581],"thead",{},[582,583,584,588,591],"tr",{},[585,586,587],"th",{},"Feature",[585,589,590],{},"Default",[585,592,593],{},"Description",[595,596,597,620],"tbody",{},[582,598,599,604,607],{},[600,601,602],"td",{},[344,603,353],{},[600,605,606],{},"yes",[600,608,609,612,613,616,617],{},[344,610,611],{},"from_config",", ",[344,614,615],{},"from_builder"," for config ",[344,618,619],{},">=0.14, \u003C0.16",[582,621,622,626,629],{},[600,623,624],{},[344,625,359],{},[600,627,628],{},"no",[600,630,631,634],{},[344,632,633],{},"from_figment"," for figment 0.10",[341,636,637,638,641,642,644],{},"Both can be enabled. The backend crates are not re-exported; add ",[344,639,640],{},"config"," \u002F ",[344,643,359],{}," yourself in a matching version.",[341,646,647,648,650],{},"MSRV: 1.85 (see ",[348,649,23],{"href":24},").",[370,652,654],{"id":653},"example","Example",[375,656,660],{"className":657,"code":658,"language":659,"meta":381,"style":381},"language-rust shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","use vld_config::prelude::*;\n\nvld::schema! {\n    #[derive(Debug)]\n    pub struct AppSettings {\n        pub host: String => vld::string().min(1),\n        pub port: i64    => vld::number().int().min(1).max(65535),\n        pub debug: bool  => vld::boolean().with_default(false),\n    }\n}\n\nlet config = config::Config::builder()\n    .add_source(config::File::with_name(\"config\").required(false))\n    \u002F\u002F Env values are strings: `try_parsing(true)` turns APP_PORT=8080 into a number.\n    .add_source(config::Environment::with_prefix(\"APP\").try_parsing(true))\n    .build()\n    .unwrap();\n\nmatch from_config::\u003CAppSettings>(&config) {\n    Ok(s) => println!(\"listening on {}:{}\", s.host, s.port),\n    Err(e) => {\n        eprintln!(\"{e}\");\n        std::process::exit(1);\n    }\n}\n","rust",[344,661,662,680,686,700,717,732,772,820,851,857,863,868,895,934,940,978,988,999,1004,1030,1085,1102,1121,1143,1148],{"__ignoreMap":381},[385,663,664,668,671,674,677],{"class":387,"line":388},[385,665,667],{"class":666},"sbssI","use",[385,669,670],{"class":395}," vld_config",[385,672,673],{"class":391},"::",[385,675,676],{"class":395},"prelude",[385,678,679],{"class":391},"::*;\n",[385,681,682],{"class":387,"line":402},[385,683,685],{"emptyLinePlaceholder":684},true,"\n",[385,687,688,691,693,697],{"class":387,"line":422},[385,689,690],{"class":395},"vld",[385,692,673],{"class":391},[385,694,696],{"class":695},"s2Zo4","schema!",[385,698,699],{"class":391}," {\n",[385,701,702,705,708,711,714],{"class":387,"line":441},[385,703,704],{"class":391},"    #[",[385,706,707],{"class":405},"derive",[385,709,710],{"class":391},"(",[385,712,713],{"class":395},"Debug",[385,715,716],{"class":391},")]\n",[385,718,720,724,727,730],{"class":387,"line":719},5,[385,721,723],{"class":722},"spNyl","    pub",[385,725,726],{"class":722}," struct",[385,728,729],{"class":395}," AppSettings",[385,731,699],{"class":391},[385,733,735,738,741,744,747,750,753,755,758,761,764,766,769],{"class":387,"line":734},6,[385,736,737],{"class":722},"        pub",[385,739,740],{"class":405}," host",[385,742,743],{"class":391},":",[385,745,746],{"class":395}," String",[385,748,749],{"class":391}," =>",[385,751,752],{"class":395}," vld",[385,754,673],{"class":391},[385,756,757],{"class":695},"string",[385,759,760],{"class":391},"().",[385,762,763],{"class":695},"min",[385,765,710],{"class":391},[385,767,768],{"class":666},"1",[385,770,771],{"class":391},"),\n",[385,773,775,777,780,782,785,788,790,792,795,797,800,802,804,806,808,810,813,815,818],{"class":387,"line":774},7,[385,776,737],{"class":722},[385,778,779],{"class":405}," port",[385,781,743],{"class":391},[385,783,784],{"class":395}," i64",[385,786,787],{"class":391},"    =>",[385,789,752],{"class":395},[385,791,673],{"class":391},[385,793,794],{"class":695},"number",[385,796,760],{"class":391},[385,798,799],{"class":695},"int",[385,801,760],{"class":391},[385,803,763],{"class":695},[385,805,710],{"class":391},[385,807,768],{"class":666},[385,809,650],{"class":391},[385,811,812],{"class":695},"max",[385,814,710],{"class":391},[385,816,817],{"class":666},"65535",[385,819,771],{"class":391},[385,821,823,825,828,830,833,836,838,840,843,845,848],{"class":387,"line":822},8,[385,824,737],{"class":722},[385,826,827],{"class":405}," debug",[385,829,743],{"class":391},[385,831,832],{"class":395}," bool",[385,834,835],{"class":391},"  =>",[385,837,752],{"class":395},[385,839,673],{"class":391},[385,841,842],{"class":695},"boolean",[385,844,760],{"class":391},[385,846,847],{"class":695},"with_default",[385,849,850],{"class":391},"(false),\n",[385,852,854],{"class":387,"line":853},9,[385,855,856],{"class":391},"    }\n",[385,858,860],{"class":387,"line":859},10,[385,861,862],{"class":391},"}\n",[385,864,866],{"class":387,"line":865},11,[385,867,685],{"emptyLinePlaceholder":684},[385,869,871,874,877,879,882,884,887,889,892],{"class":387,"line":870},12,[385,872,873],{"class":722},"let",[385,875,876],{"class":405}," config ",[385,878,409],{"class":391},[385,880,881],{"class":395}," config",[385,883,673],{"class":391},[385,885,886],{"class":395},"Config",[385,888,673],{"class":391},[385,890,891],{"class":695},"builder",[385,893,894],{"class":391},"()\n",[385,896,898,901,904,906,908,910,913,915,918,920,922,924,926,928,931],{"class":387,"line":897},13,[385,899,900],{"class":391},"    .",[385,902,903],{"class":695},"add_source",[385,905,710],{"class":391},[385,907,640],{"class":395},[385,909,673],{"class":391},[385,911,912],{"class":395},"File",[385,914,673],{"class":391},[385,916,917],{"class":695},"with_name",[385,919,710],{"class":391},[385,921,434],{"class":391},[385,923,640],{"class":415},[385,925,434],{"class":391},[385,927,650],{"class":391},[385,929,930],{"class":695},"required",[385,932,933],{"class":391},"(false))\n",[385,935,937],{"class":387,"line":936},14,[385,938,939],{"class":437},"    \u002F\u002F Env values are strings: `try_parsing(true)` turns APP_PORT=8080 into a number.\n",[385,941,943,945,947,949,951,953,956,958,961,963,965,968,970,972,975],{"class":387,"line":942},15,[385,944,900],{"class":391},[385,946,903],{"class":695},[385,948,710],{"class":391},[385,950,640],{"class":395},[385,952,673],{"class":391},[385,954,955],{"class":395},"Environment",[385,957,673],{"class":391},[385,959,960],{"class":695},"with_prefix",[385,962,710],{"class":391},[385,964,434],{"class":391},[385,966,967],{"class":415},"APP",[385,969,434],{"class":391},[385,971,650],{"class":391},[385,973,974],{"class":695},"try_parsing",[385,976,977],{"class":391},"(true))\n",[385,979,981,983,986],{"class":387,"line":980},16,[385,982,900],{"class":391},[385,984,985],{"class":695},"build",[385,987,894],{"class":391},[385,989,991,993,996],{"class":387,"line":990},17,[385,992,900],{"class":391},[385,994,995],{"class":695},"unwrap",[385,997,998],{"class":391},"();\n",[385,1000,1002],{"class":387,"line":1001},18,[385,1003,685],{"emptyLinePlaceholder":684},[385,1005,1007,1011,1014,1017,1020,1023,1025,1028],{"class":387,"line":1006},19,[385,1008,1010],{"class":1009},"s7zQu","match",[385,1012,1013],{"class":695}," from_config",[385,1015,1016],{"class":391},"::\u003C",[385,1018,1019],{"class":395},"AppSettings",[385,1021,1022],{"class":391},">(&",[385,1024,640],{"class":405},[385,1026,1027],{"class":391},")",[385,1029,699],{"class":391},[385,1031,1033,1036,1038,1041,1043,1045,1048,1050,1052,1055,1058,1060,1063,1065,1068,1071,1074,1076,1078,1080,1083],{"class":387,"line":1032},20,[385,1034,1035],{"class":395},"    Ok",[385,1037,710],{"class":391},[385,1039,1040],{"class":405},"s",[385,1042,1027],{"class":391},[385,1044,749],{"class":391},[385,1046,1047],{"class":695}," println!",[385,1049,710],{"class":391},[385,1051,434],{"class":391},[385,1053,1054],{"class":415},"listening on ",[385,1056,1057],{"class":391},"{}",[385,1059,743],{"class":415},[385,1061,1062],{"class":391},"{}\"",[385,1064,492],{"class":391},[385,1066,1067],{"class":405}," s",[385,1069,1070],{"class":391},".",[385,1072,1073],{"class":405},"host",[385,1075,492],{"class":391},[385,1077,1067],{"class":405},[385,1079,1070],{"class":391},[385,1081,1082],{"class":405},"port",[385,1084,771],{"class":391},[385,1086,1088,1091,1093,1096,1098,1100],{"class":387,"line":1087},21,[385,1089,1090],{"class":395},"    Err",[385,1092,710],{"class":391},[385,1094,1095],{"class":405},"e",[385,1097,1027],{"class":391},[385,1099,749],{"class":391},[385,1101,699],{"class":391},[385,1103,1105,1108,1110,1113,1115,1118],{"class":387,"line":1104},22,[385,1106,1107],{"class":695},"        eprintln!",[385,1109,710],{"class":391},[385,1111,1112],{"class":391},"\"{",[385,1114,1095],{"class":415},[385,1116,1117],{"class":391},"}\"",[385,1119,1120],{"class":391},");\n",[385,1122,1124,1127,1129,1132,1134,1137,1139,1141],{"class":387,"line":1123},23,[385,1125,1126],{"class":395},"        std",[385,1128,673],{"class":391},[385,1130,1131],{"class":395},"process",[385,1133,673],{"class":391},[385,1135,1136],{"class":695},"exit",[385,1138,710],{"class":391},[385,1140,768],{"class":666},[385,1142,1120],{"class":391},[385,1144,1146],{"class":387,"line":1145},24,[385,1147,856],{"class":391},[385,1149,1151],{"class":387,"line":1150},25,[385,1152,862],{"class":391},[341,1154,1155],{},"figment:",[375,1157,1159],{"className":657,"code":1158,"language":659,"meta":381,"style":381},"let figment = figment::Figment::new()\n    .merge(figment::providers::Serialized::defaults(\n        serde_json::json!({\"host\": \"0.0.0.0\", \"port\": 3000}),\n    ))\n    .merge(figment::providers::Env::prefixed(\"APP_\"));\n\nlet settings: AppSettings = vld_config::from_figment(&figment).unwrap();\n",[344,1160,1161,1185,1214,1258,1263,1299,1303],{"__ignoreMap":381},[385,1162,1163,1165,1168,1170,1173,1175,1178,1180,1183],{"class":387,"line":388},[385,1164,873],{"class":722},[385,1166,1167],{"class":405}," figment ",[385,1169,409],{"class":391},[385,1171,1172],{"class":395}," figment",[385,1174,673],{"class":391},[385,1176,1177],{"class":395},"Figment",[385,1179,673],{"class":391},[385,1181,1182],{"class":695},"new",[385,1184,894],{"class":391},[385,1186,1187,1189,1192,1194,1196,1198,1201,1203,1206,1208,1211],{"class":387,"line":402},[385,1188,900],{"class":391},[385,1190,1191],{"class":695},"merge",[385,1193,710],{"class":391},[385,1195,359],{"class":395},[385,1197,673],{"class":391},[385,1199,1200],{"class":395},"providers",[385,1202,673],{"class":391},[385,1204,1205],{"class":395},"Serialized",[385,1207,673],{"class":391},[385,1209,1210],{"class":695},"defaults",[385,1212,1213],{"class":391},"(\n",[385,1215,1216,1219,1221,1224,1227,1229,1231,1233,1235,1237,1240,1242,1244,1246,1248,1250,1252,1255],{"class":387,"line":422},[385,1217,1218],{"class":395},"        serde_json",[385,1220,673],{"class":391},[385,1222,1223],{"class":695},"json!",[385,1225,1226],{"class":391},"({",[385,1228,434],{"class":391},[385,1230,1073],{"class":415},[385,1232,434],{"class":391},[385,1234,743],{"class":391},[385,1236,412],{"class":391},[385,1238,1239],{"class":415},"0.0.0.0",[385,1241,434],{"class":391},[385,1243,492],{"class":391},[385,1245,412],{"class":391},[385,1247,1082],{"class":415},[385,1249,434],{"class":391},[385,1251,743],{"class":391},[385,1253,1254],{"class":666}," 3000",[385,1256,1257],{"class":391},"}),\n",[385,1259,1260],{"class":387,"line":441},[385,1261,1262],{"class":391},"    ))\n",[385,1264,1265,1267,1269,1271,1273,1275,1277,1279,1282,1284,1287,1289,1291,1294,1296],{"class":387,"line":719},[385,1266,900],{"class":391},[385,1268,1191],{"class":695},[385,1270,710],{"class":391},[385,1272,359],{"class":395},[385,1274,673],{"class":391},[385,1276,1200],{"class":395},[385,1278,673],{"class":391},[385,1280,1281],{"class":395},"Env",[385,1283,673],{"class":391},[385,1285,1286],{"class":695},"prefixed",[385,1288,710],{"class":391},[385,1290,434],{"class":391},[385,1292,1293],{"class":415},"APP_",[385,1295,434],{"class":391},[385,1297,1298],{"class":391},"));\n",[385,1300,1301],{"class":387,"line":734},[385,1302,685],{"emptyLinePlaceholder":684},[385,1304,1305,1307,1310,1312,1314,1317,1319,1321,1323,1326,1328,1330,1332],{"class":387,"line":774},[385,1306,873],{"class":722},[385,1308,1309],{"class":405}," settings",[385,1311,743],{"class":391},[385,1313,729],{"class":395},[385,1315,1316],{"class":391}," =",[385,1318,670],{"class":395},[385,1320,673],{"class":391},[385,1322,633],{"class":695},[385,1324,1325],{"class":391},"(&",[385,1327,359],{"class":405},[385,1329,650],{"class":391},[385,1331,995],{"class":695},[385,1333,998],{"class":391},[370,1335,1337],{"id":1336},"api","API",[576,1339,1340,1349],{},[579,1341,1342],{},[582,1343,1344,1347],{},[585,1345,1346],{},"Item",[585,1348,593],{},[595,1350,1351,1370,1380,1390,1400,1410,1434],{},[582,1352,1353,1358],{},[600,1354,1355],{},[344,1356,1357],{},"from_config::\u003CT>(&config::Config)",[600,1359,1360,1361,1366,1367],{},"Deserialize to JSON, then ",[348,1362,1363],{"href":149},[344,1364,1365],{},"parse_coerced"," into ",[344,1368,1369],{},"T",[582,1371,1372,1377],{},[600,1373,1374],{},[344,1375,1376],{},"from_builder::\u003CT>(ConfigBuilder)",[600,1378,1379],{},"Build the config, then as above",[582,1381,1382,1387],{},[600,1383,1384],{},[344,1385,1386],{},"from_figment::\u003CT>(&figment::Figment)",[600,1388,1389],{},"Extract to JSON, then as above",[582,1391,1392,1397],{},[600,1393,1394],{},[344,1395,1396],{},"from_value::\u003CT>(&Value)",[600,1398,1399],{},"Strict parse of a JSON value (no coercion)",[582,1401,1402,1407],{},[600,1403,1404],{},[344,1405,1406],{},"from_value_coerced::\u003CT>(&Value)",[600,1408,1409],{},"The same coercion the backends use",[582,1411,1412,1417],{},[600,1413,1414],{},[344,1415,1416],{},"VldConfigError",[600,1418,1419,1422,1423,1426,1427,1430,1431],{},[344,1420,1421],{},"Source(String)"," (loading failed) or ",[344,1424,1425],{},"Validation(VldError)","; implements ",[344,1428,1429],{},"Error"," with ",[344,1432,1433],{},"source()",[582,1435,1436,1440],{},[600,1437,1438],{},[344,1439,676],{},[600,1441,1442,1445,1446,1449,1450,612,1452],{},[344,1443,1444],{},"from_*"," (except ",[344,1447,1448],{},"from_value_coerced","), ",[344,1451,1416],{},[344,1453,1454],{},"vld::prelude::*",[341,1456,1457,1459,1460,1463,1464,612,1467,1469,1470,1472,1473,1070],{},[344,1458,1369],{}," is any ",[344,1461,1462],{},"VldParse"," type: ",[344,1465,1466],{},"vld::schema!",[344,1468,84],{},", or ",[348,1471,202],{"href":203},"' ",[344,1474,1475],{},"impl_vld_parse!",[370,1477,1479],{"id":1478},"gotchas","Gotchas",[1481,1482,1483,1526,1537],"ul",{},[1484,1485,1486,1490,1491,612,1493,1495,1496,1498,1499,1502,1503,1506,1507,1510,1511,1506,1514,1517,1518,1521,1522,1525],"li",{},[1487,1488,1489],"strong",{},"Coercion",": ",[344,1492,611],{},[344,1494,615],{}," and ",[344,1497,633],{}," use ",[344,1500,1501],{},"vld::schema::parse_coerced",". A number or boolean the backend parsed is turned back into text where the schema wants a string (",[344,1504,1505],{},"APP_HOST=12345"," → ",[344,1508,1509],{},"\"12345\"","), and a single value is wrapped where the schema wants an array. The text is the backend's parsed value, so a lossy parse (",[344,1512,1513],{},"\"01234\"",[344,1515,1516],{},"1234",") gives ",[344,1519,1520],{},"\"1234\"",". ",[344,1523,1524],{},"from_value"," does none of this.",[1484,1527,1528,1529,1532,1533,1536],{},"config-rs reads env values as strings unless ",[344,1530,1531],{},"try_parsing(true)"," is set; without it ",[344,1534,1535],{},"vld::number()"," fields fail on env overrides.",[1484,1538,1539,1540,1543,1544,1547,1548,1070],{},"Errors carry the JSON path of the bad key (",[344,1541,1542],{},"database.port","); print them with ",[344,1545,1546],{},"{e}"," or the ",[348,1549,1550],{"href":111},"formatting helpers",[1552,1553,1554],"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}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}",{"title":381,"searchDepth":402,"depth":422,"links":1556},[1557,1558,1559,1560,1561],{"id":372,"depth":402,"text":373},{"id":573,"depth":402,"text":574},{"id":653,"depth":402,"text":654},{"id":1336,"depth":402,"text":1337},{"id":1478,"depth":402,"text":1479},"Validate configuration loaded with config-rs or figment against a vld schema, with every invalid key reported at startup.","md",[1565,1570],{"label":1566,"icon":1567,"to":1568,"target":1569},"crates.io","i-simple-icons-rust","https:\u002F\u002Fcrates.io\u002Fcrates\u002Fvld-config","_blank",{"label":1571,"icon":307,"to":1572,"target":1569},"docs.rs","https:\u002F\u002Fdocs.rs\u002Fvld-config",{},{"title":266,"description":1562},"-laMz5Gk68OAqmt3JEzYno71JldDbadq5tbw3uYPJ7Q",[1577,1579],{"title":256,"path":257,"stem":258,"description":1578,"children":-1},"A lapin channel wrapper that validates RabbitMQ message payloads before publish and after consume.",{"title":270,"path":271,"stem":272,"description":1580,"children":-1},"Validate clap-parsed CLI arguments with",1794036362712]