[{"data":1,"prerenderedAt":1730},["ShallowReactive",2],{"navigation":3,"\u002Fintegrations\u002Fdatabase\u002Fsqlx":335,"\u002Fintegrations\u002Fdatabase\u002Fsqlx-surround":1725},[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":230,"body":337,"description":1711,"extension":1712,"links":1713,"meta":1722,"navigation":727,"path":231,"seo":1723,"stem":232,"__hash__":1724},"docs\u002F6.integrations\u002F4.database\u002F1.sqlx.md",{"type":338,"value":339,"toc":1704},"minimark",[340,372,377,498,510,514,597,606,666,679,683,1437,1441,1567,1571,1700],[341,342,343,346,347,350,351,350,354,350,357,360,361,350,364,367,368,371],"p",{},[344,345,230],"code",{}," checks a value against a vld schema before you write it with SQLx, and provides column wrappers (",[344,348,349],{},"VldText",", ",[344,352,353],{},"VldInt",[344,355,356],{},"VldFloat",[344,358,359],{},"VldBool",") that implement ",[344,362,363],{},"sqlx::Type",[344,365,366],{},"Encode"," and ",[344,369,370],{},"Decode",".",[373,374,376],"h2",{"id":375},"install","Install",[378,379,385],"pre",{"className":380,"code":381,"filename":382,"language":383,"meta":384,"style":384},"language-toml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","[dependencies]\nvld = \"0.5\"\nvld-sqlx = \"0.5\"  # SQLx 0.8 + SQLite by default\nsqlx = { version = \"0.8\", features = [\"runtime-tokio\", \"sqlite\"] }\n","Cargo.toml","toml","",[344,386,387,403,423,442],{"__ignoreMap":384},[388,389,392,396,400],"span",{"class":390,"line":391},"line",1,[388,393,395],{"class":394},"sMK4o","[",[388,397,399],{"class":398},"sBMFI","dependencies",[388,401,402],{"class":394},"]\n",[388,404,406,410,413,416,420],{"class":390,"line":405},2,[388,407,409],{"class":408},"sTEyZ","vld ",[388,411,412],{"class":394},"=",[388,414,415],{"class":394}," \"",[388,417,419],{"class":418},"sfazB","0.5",[388,421,422],{"class":394},"\"\n",[388,424,426,429,431,433,435,438],{"class":390,"line":425},3,[388,427,428],{"class":408},"vld-sqlx ",[388,430,412],{"class":394},[388,432,415],{"class":394},[388,434,419],{"class":418},[388,436,437],{"class":394},"\"",[388,439,441],{"class":440},"sHwdD","  # SQLx 0.8 + SQLite by default\n",[388,443,445,448,450,453,456,458,460,463,465,468,471,473,476,478,481,483,485,487,490,492,495],{"class":390,"line":444},4,[388,446,447],{"class":408},"sqlx ",[388,449,412],{"class":394},[388,451,452],{"class":394}," {",[388,454,455],{"class":408}," version ",[388,457,412],{"class":394},[388,459,415],{"class":394},[388,461,462],{"class":418},"0.8",[388,464,437],{"class":394},[388,466,467],{"class":394},",",[388,469,470],{"class":408}," features ",[388,472,412],{"class":394},[388,474,475],{"class":394}," [",[388,477,437],{"class":394},[388,479,480],{"class":418},"runtime-tokio",[388,482,437],{"class":394},[388,484,467],{"class":394},[388,486,415],{"class":394},[388,488,489],{"class":418},"sqlite",[388,491,437],{"class":394},[388,493,494],{"class":394},"]",[388,496,497],{"class":394}," }\n",[341,499,500,502,503,506,507,509],{},[344,501,230],{}," enables no SQLx runtime or TLS features: pick them on your own ",[344,504,505],{},"sqlx"," dependency (the same major as the ",[344,508,230],{}," feature).",[373,511,513],{"id":512},"features","Features",[515,516,517,533],"table",{},[518,519,520],"thead",{},[521,522,523,527,530],"tr",{},[524,525,526],"th",{},"Feature",[524,528,529],{},"Default",[524,531,532],{},"Effect",[534,535,536,550,562,573,585],"tbody",{},[521,537,538,544,547],{},[539,540,541],"td",{},[344,542,543],{},"sqlx-0_8",[539,545,546],{},"yes",[539,548,549],{},"Build against SQLx 0.8",[521,551,552,557,559],{},[539,553,554],{},[344,555,556],{},"sqlx-0_9",[539,558],{},[539,560,561],{},"Build against SQLx 0.9 (Rust 1.94+)",[521,563,564,568,570],{},[539,565,566],{},[344,567,489],{},[539,569,546],{},[539,571,572],{},"SQLx SQLite driver",[521,574,575,580,582],{},[539,576,577],{},[344,578,579],{},"postgres",[539,581],{},[539,583,584],{},"SQLx Postgres driver",[521,586,587,592,594],{},[539,588,589],{},[344,590,591],{},"mysql",[539,593],{},[539,595,596],{},"SQLx MySQL driver",[341,598,599,600,602,603,605],{},"Exactly one of ",[344,601,543],{}," \u002F ",[344,604,556],{}," must be enabled; both (or none) is a compile error. For SQLx 0.9:",[378,607,609],{"className":380,"code":608,"language":383,"meta":384,"style":384},"vld-sqlx = { version = \"0.5\", default-features = false, features = [\"sqlx-0_9\", \"postgres\"] }\n",[344,610,611],{"__ignoreMap":384},[388,612,613,615,617,619,621,623,625,627,629,631,634,636,640,642,644,646,648,650,652,654,656,658,660,662,664],{"class":390,"line":391},[388,614,428],{"class":408},[388,616,412],{"class":394},[388,618,452],{"class":394},[388,620,455],{"class":408},[388,622,412],{"class":394},[388,624,415],{"class":394},[388,626,419],{"class":418},[388,628,437],{"class":394},[388,630,467],{"class":394},[388,632,633],{"class":408}," default-features ",[388,635,412],{"class":394},[388,637,639],{"class":638},"sfNiH"," false",[388,641,467],{"class":394},[388,643,470],{"class":408},[388,645,412],{"class":394},[388,647,475],{"class":394},[388,649,437],{"class":394},[388,651,556],{"class":418},[388,653,437],{"class":394},[388,655,467],{"class":394},[388,657,415],{"class":394},[388,659,579],{"class":418},[388,661,437],{"class":394},[388,663,494],{"class":394},[388,665,497],{"class":394},[341,667,668,669,671,672,674,675,678],{},"MSRV: 1.85 with ",[344,670,543],{},", 1.94 with ",[344,673,556],{}," (see ",[676,677,23],"a",{"href":24},").",[373,680,682],{"id":681},"example","Example",[378,684,688],{"className":685,"code":686,"language":687,"meta":384,"style":384},"language-rust shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","use sqlx::SqlitePool;\nuse vld_sqlx::prelude::*;\n\nvld::schema! {\n    #[derive(Debug)]\n    pub struct NewUserSchema {\n        pub name: String  => vld::string().min(1).max(100),\n        pub email: String => vld::string().email(),\n        pub age: i64      => vld::number().int().min(0).max(150),\n    }\n}\n\n\u002F\u002F A column schema: the wrapper is checked as `{\"value\": ...}`.\nvld::schema! {\n    #[derive(Debug)]\n    pub struct EmailField {\n        pub value: String => vld::string().email(),\n    }\n}\n\n#[derive(Debug, serde::Serialize)]\nstruct NewUser { name: String, email: String, age: i64 }\n\nasync fn insert(pool: &SqlitePool) -> Result\u003C(), Box\u003Cdyn std::error::Error>> {\n    let user = NewUser { name: \"Alice\".into(), email: \"alice@example.com\".into(), age: 30 };\n    validate_insert::\u003CNewUserSchema, _>(&user)?;\n    sqlx::query(\"INSERT INTO users (name, email, age) VALUES (?, ?, ?)\")\n        .bind(&user.name)\n        .bind(&user.email)\n        .bind(user.age)\n        .execute(pool)\n        .await?;\n\n    \u002F\u002F Validated column value, bound directly.\n    let email = VldText::\u003CEmailField>::new(\"carol@example.com\")?;\n    sqlx::query(\"UPDATE users SET email = ? WHERE name = 'Alice'\")\n        .bind(&email)\n        .execute(pool)\n        .await?;\n    Ok(())\n}\n","rust",[344,689,690,708,723,729,743,761,776,826,855,903,909,915,920,926,937,950,962,988,993,998,1003,1027,1062,1067,1130,1191,1217,1240,1261,1278,1296,1310,1322,1327,1333,1368,1388,1401,1414,1423,1432],{"__ignoreMap":384},[388,691,692,696,699,702,705],{"class":390,"line":391},[388,693,695],{"class":694},"sbssI","use",[388,697,698],{"class":398}," sqlx",[388,700,701],{"class":394},"::",[388,703,704],{"class":398},"SqlitePool",[388,706,707],{"class":394},";\n",[388,709,710,712,715,717,720],{"class":390,"line":405},[388,711,695],{"class":694},[388,713,714],{"class":398}," vld_sqlx",[388,716,701],{"class":394},[388,718,719],{"class":398},"prelude",[388,721,722],{"class":394},"::*;\n",[388,724,725],{"class":390,"line":425},[388,726,728],{"emptyLinePlaceholder":727},true,"\n",[388,730,731,734,736,740],{"class":390,"line":444},[388,732,733],{"class":398},"vld",[388,735,701],{"class":394},[388,737,739],{"class":738},"s2Zo4","schema!",[388,741,742],{"class":394}," {\n",[388,744,746,749,752,755,758],{"class":390,"line":745},5,[388,747,748],{"class":394},"    #[",[388,750,751],{"class":408},"derive",[388,753,754],{"class":394},"(",[388,756,757],{"class":398},"Debug",[388,759,760],{"class":394},")]\n",[388,762,764,768,771,774],{"class":390,"line":763},6,[388,765,767],{"class":766},"spNyl","    pub",[388,769,770],{"class":766}," struct",[388,772,773],{"class":398}," NewUserSchema",[388,775,742],{"class":394},[388,777,779,782,785,788,791,794,797,799,802,805,808,810,813,815,818,820,823],{"class":390,"line":778},7,[388,780,781],{"class":766},"        pub",[388,783,784],{"class":408}," name",[388,786,787],{"class":394},":",[388,789,790],{"class":398}," String",[388,792,793],{"class":394},"  =>",[388,795,796],{"class":398}," vld",[388,798,701],{"class":394},[388,800,801],{"class":738},"string",[388,803,804],{"class":394},"().",[388,806,807],{"class":738},"min",[388,809,754],{"class":394},[388,811,812],{"class":694},"1",[388,814,678],{"class":394},[388,816,817],{"class":738},"max",[388,819,754],{"class":394},[388,821,822],{"class":694},"100",[388,824,825],{"class":394},"),\n",[388,827,829,831,834,836,838,841,843,845,847,849,852],{"class":390,"line":828},8,[388,830,781],{"class":766},[388,832,833],{"class":408}," email",[388,835,787],{"class":394},[388,837,790],{"class":398},[388,839,840],{"class":394}," =>",[388,842,796],{"class":398},[388,844,701],{"class":394},[388,846,801],{"class":738},[388,848,804],{"class":394},[388,850,851],{"class":738},"email",[388,853,854],{"class":394},"(),\n",[388,856,858,860,863,865,868,871,873,875,878,880,883,885,887,889,892,894,896,898,901],{"class":390,"line":857},9,[388,859,781],{"class":766},[388,861,862],{"class":408}," age",[388,864,787],{"class":394},[388,866,867],{"class":398}," i64",[388,869,870],{"class":394},"      =>",[388,872,796],{"class":398},[388,874,701],{"class":394},[388,876,877],{"class":738},"number",[388,879,804],{"class":394},[388,881,882],{"class":738},"int",[388,884,804],{"class":394},[388,886,807],{"class":738},[388,888,754],{"class":394},[388,890,891],{"class":694},"0",[388,893,678],{"class":394},[388,895,817],{"class":738},[388,897,754],{"class":394},[388,899,900],{"class":694},"150",[388,902,825],{"class":394},[388,904,906],{"class":390,"line":905},10,[388,907,908],{"class":394},"    }\n",[388,910,912],{"class":390,"line":911},11,[388,913,914],{"class":394},"}\n",[388,916,918],{"class":390,"line":917},12,[388,919,728],{"emptyLinePlaceholder":727},[388,921,923],{"class":390,"line":922},13,[388,924,925],{"class":440},"\u002F\u002F A column schema: the wrapper is checked as `{\"value\": ...}`.\n",[388,927,929,931,933,935],{"class":390,"line":928},14,[388,930,733],{"class":398},[388,932,701],{"class":394},[388,934,739],{"class":738},[388,936,742],{"class":394},[388,938,940,942,944,946,948],{"class":390,"line":939},15,[388,941,748],{"class":394},[388,943,751],{"class":408},[388,945,754],{"class":394},[388,947,757],{"class":398},[388,949,760],{"class":394},[388,951,953,955,957,960],{"class":390,"line":952},16,[388,954,767],{"class":766},[388,956,770],{"class":766},[388,958,959],{"class":398}," EmailField",[388,961,742],{"class":394},[388,963,965,967,970,972,974,976,978,980,982,984,986],{"class":390,"line":964},17,[388,966,781],{"class":766},[388,968,969],{"class":408}," value",[388,971,787],{"class":394},[388,973,790],{"class":398},[388,975,840],{"class":394},[388,977,796],{"class":398},[388,979,701],{"class":394},[388,981,801],{"class":738},[388,983,804],{"class":394},[388,985,851],{"class":738},[388,987,854],{"class":394},[388,989,991],{"class":390,"line":990},18,[388,992,908],{"class":394},[388,994,996],{"class":390,"line":995},19,[388,997,914],{"class":394},[388,999,1001],{"class":390,"line":1000},20,[388,1002,728],{"emptyLinePlaceholder":727},[388,1004,1006,1009,1011,1013,1015,1017,1020,1022,1025],{"class":390,"line":1005},21,[388,1007,1008],{"class":394},"#[",[388,1010,751],{"class":408},[388,1012,754],{"class":394},[388,1014,757],{"class":398},[388,1016,467],{"class":394},[388,1018,1019],{"class":408}," serde",[388,1021,701],{"class":394},[388,1023,1024],{"class":398},"Serialize",[388,1026,760],{"class":394},[388,1028,1030,1033,1036,1038,1040,1042,1044,1046,1048,1050,1052,1054,1056,1058,1060],{"class":390,"line":1029},22,[388,1031,1032],{"class":766},"struct",[388,1034,1035],{"class":398}," NewUser",[388,1037,452],{"class":394},[388,1039,784],{"class":408},[388,1041,787],{"class":394},[388,1043,790],{"class":398},[388,1045,467],{"class":394},[388,1047,833],{"class":408},[388,1049,787],{"class":394},[388,1051,790],{"class":398},[388,1053,467],{"class":394},[388,1055,862],{"class":408},[388,1057,787],{"class":394},[388,1059,867],{"class":398},[388,1061,497],{"class":394},[388,1063,1065],{"class":390,"line":1064},23,[388,1066,728],{"emptyLinePlaceholder":727},[388,1068,1070,1073,1076,1079,1081,1084,1086,1089,1091,1094,1097,1100,1103,1106,1109,1112,1115,1117,1120,1122,1125,1128],{"class":390,"line":1069},24,[388,1071,1072],{"class":694},"async",[388,1074,1075],{"class":694}," fn",[388,1077,1078],{"class":738}," insert",[388,1080,754],{"class":394},[388,1082,1083],{"class":408},"pool",[388,1085,787],{"class":394},[388,1087,1088],{"class":394}," &",[388,1090,704],{"class":398},[388,1092,1093],{"class":394},")",[388,1095,1096],{"class":394}," ->",[388,1098,1099],{"class":398}," Result",[388,1101,1102],{"class":394},"\u003C(),",[388,1104,1105],{"class":398}," Box",[388,1107,1108],{"class":394},"\u003C",[388,1110,1111],{"class":694},"dyn",[388,1113,1114],{"class":408}," std",[388,1116,701],{"class":394},[388,1118,1119],{"class":408},"error",[388,1121,701],{"class":394},[388,1123,1124],{"class":398},"Error",[388,1126,1127],{"class":394},">>",[388,1129,742],{"class":394},[388,1131,1133,1136,1139,1141,1143,1145,1147,1149,1151,1154,1156,1158,1161,1164,1166,1168,1170,1173,1175,1177,1179,1181,1183,1185,1188],{"class":390,"line":1132},25,[388,1134,1135],{"class":766},"    let",[388,1137,1138],{"class":408}," user ",[388,1140,412],{"class":394},[388,1142,1035],{"class":398},[388,1144,452],{"class":394},[388,1146,784],{"class":408},[388,1148,787],{"class":394},[388,1150,415],{"class":394},[388,1152,1153],{"class":418},"Alice",[388,1155,437],{"class":394},[388,1157,371],{"class":394},[388,1159,1160],{"class":738},"into",[388,1162,1163],{"class":394},"(),",[388,1165,833],{"class":408},[388,1167,787],{"class":394},[388,1169,415],{"class":394},[388,1171,1172],{"class":418},"alice@example.com",[388,1174,437],{"class":394},[388,1176,371],{"class":394},[388,1178,1160],{"class":738},[388,1180,1163],{"class":394},[388,1182,862],{"class":408},[388,1184,787],{"class":394},[388,1186,1187],{"class":694}," 30",[388,1189,1190],{"class":394}," };\n",[388,1192,1194,1197,1200,1203,1205,1208,1211,1214],{"class":390,"line":1193},26,[388,1195,1196],{"class":738},"    validate_insert",[388,1198,1199],{"class":394},"::\u003C",[388,1201,1202],{"class":398},"NewUserSchema",[388,1204,467],{"class":394},[388,1206,1207],{"class":408}," _",[388,1209,1210],{"class":394},">(&",[388,1212,1213],{"class":408},"user",[388,1215,1216],{"class":394},")?;\n",[388,1218,1220,1223,1225,1228,1230,1232,1235,1237],{"class":390,"line":1219},27,[388,1221,1222],{"class":398},"    sqlx",[388,1224,701],{"class":394},[388,1226,1227],{"class":738},"query",[388,1229,754],{"class":394},[388,1231,437],{"class":394},[388,1233,1234],{"class":418},"INSERT INTO users (name, email, age) VALUES (?, ?, ?)",[388,1236,437],{"class":394},[388,1238,1239],{"class":394},")\n",[388,1241,1243,1246,1249,1252,1254,1256,1259],{"class":390,"line":1242},28,[388,1244,1245],{"class":394},"        .",[388,1247,1248],{"class":738},"bind",[388,1250,1251],{"class":394},"(&",[388,1253,1213],{"class":408},[388,1255,371],{"class":394},[388,1257,1258],{"class":408},"name",[388,1260,1239],{"class":394},[388,1262,1264,1266,1268,1270,1272,1274,1276],{"class":390,"line":1263},29,[388,1265,1245],{"class":394},[388,1267,1248],{"class":738},[388,1269,1251],{"class":394},[388,1271,1213],{"class":408},[388,1273,371],{"class":394},[388,1275,851],{"class":408},[388,1277,1239],{"class":394},[388,1279,1281,1283,1285,1287,1289,1291,1294],{"class":390,"line":1280},30,[388,1282,1245],{"class":394},[388,1284,1248],{"class":738},[388,1286,754],{"class":394},[388,1288,1213],{"class":408},[388,1290,371],{"class":394},[388,1292,1293],{"class":408},"age",[388,1295,1239],{"class":394},[388,1297,1299,1301,1304,1306,1308],{"class":390,"line":1298},31,[388,1300,1245],{"class":394},[388,1302,1303],{"class":738},"execute",[388,1305,754],{"class":394},[388,1307,1083],{"class":408},[388,1309,1239],{"class":394},[388,1311,1313,1315,1319],{"class":390,"line":1312},32,[388,1314,1245],{"class":394},[388,1316,1318],{"class":1317},"s7zQu","await",[388,1320,1321],{"class":394},"?;\n",[388,1323,1325],{"class":390,"line":1324},33,[388,1326,728],{"emptyLinePlaceholder":727},[388,1328,1330],{"class":390,"line":1329},34,[388,1331,1332],{"class":440},"    \u002F\u002F Validated column value, bound directly.\n",[388,1334,1336,1338,1341,1343,1346,1348,1351,1354,1357,1359,1361,1364,1366],{"class":390,"line":1335},35,[388,1337,1135],{"class":766},[388,1339,1340],{"class":408}," email ",[388,1342,412],{"class":394},[388,1344,1345],{"class":398}," VldText",[388,1347,1199],{"class":394},[388,1349,1350],{"class":398},"EmailField",[388,1352,1353],{"class":394},">::",[388,1355,1356],{"class":738},"new",[388,1358,754],{"class":394},[388,1360,437],{"class":394},[388,1362,1363],{"class":418},"carol@example.com",[388,1365,437],{"class":394},[388,1367,1216],{"class":394},[388,1369,1371,1373,1375,1377,1379,1381,1384,1386],{"class":390,"line":1370},36,[388,1372,1222],{"class":398},[388,1374,701],{"class":394},[388,1376,1227],{"class":738},[388,1378,754],{"class":394},[388,1380,437],{"class":394},[388,1382,1383],{"class":418},"UPDATE users SET email = ? WHERE name = 'Alice'",[388,1385,437],{"class":394},[388,1387,1239],{"class":394},[388,1389,1391,1393,1395,1397,1399],{"class":390,"line":1390},37,[388,1392,1245],{"class":394},[388,1394,1248],{"class":738},[388,1396,1251],{"class":394},[388,1398,851],{"class":408},[388,1400,1239],{"class":394},[388,1402,1404,1406,1408,1410,1412],{"class":390,"line":1403},38,[388,1405,1245],{"class":394},[388,1407,1303],{"class":738},[388,1409,754],{"class":394},[388,1411,1083],{"class":408},[388,1413,1239],{"class":394},[388,1415,1417,1419,1421],{"class":390,"line":1416},39,[388,1418,1245],{"class":394},[388,1420,1318],{"class":1317},[388,1422,1321],{"class":394},[388,1424,1426,1429],{"class":390,"line":1425},40,[388,1427,1428],{"class":398},"    Ok",[388,1430,1431],{"class":394},"(())\n",[388,1433,1435],{"class":390,"line":1434},41,[388,1436,914],{"class":394},[373,1438,1440],{"id":1439},"api","API",[1442,1443,1444,1458,1464,1474,1496,1543,1559],"ul",{},[1445,1446,1447,1450,1451,1454,1455,371],"li",{},[344,1448,1449],{},"validate_insert::\u003CS, T>(&value)"," — serialize ",[344,1452,1453],{},"value"," to JSON and validate it against schema type ",[344,1456,1457],{},"S",[1445,1459,1460,1463],{},[344,1461,1462],{},"validate_row::\u003CS, T>(&row)"," — the same check for a row loaded from the database.",[1445,1465,1466,1469,1470,1473],{},[344,1467,1468],{},"validate_rows::\u003CS, T>(&rows)"," — validate a batch; the error is ",[344,1471,1472],{},"(index, VldSqlxError)"," of the first invalid row.",[1445,1475,1476,1479,1480,1483,1484,350,1487,350,1490,1493,1494,371],{},[344,1477,1478],{},"Validated\u003CS, T>"," — ",[344,1481,1482],{},"Validated::new(value)"," validates and wraps; ",[344,1485,1486],{},"inner()",[344,1488,1489],{},"into_inner()",[344,1491,1492],{},"Deref",", transparent ",[344,1495,1024],{},[1445,1497,1498,350,1501,350,1504,350,1507,1510,1511,602,1514,602,1517,602,1520,1523,1524,1527,1528,1531,1532,350,1534,350,1537,1539,1540,371],{},[344,1499,1500],{},"VldText\u003CS>",[344,1502,1503],{},"VldInt\u003CS>",[344,1505,1506],{},"VldFloat\u003CS>",[344,1508,1509],{},"VldBool\u003CS>"," — column wrappers over ",[344,1512,1513],{},"String",[344,1515,1516],{},"i64",[344,1518,1519],{},"f64",[344,1521,1522],{},"bool","; ",[344,1525,1526],{},"new()"," validates, ",[344,1529,1530],{},"new_unchecked()"," skips the check; ",[344,1533,1492],{},[344,1535,1536],{},"Display",[344,1538,1024],{},", validating ",[344,1541,1542],{},"Deserialize",[1445,1544,1545,1479,1548,1551,1552,1555,1556,371],{},[344,1546,1547],{},"VldSqlxError",[344,1549,1550],{},"Validation(VldError)"," or ",[344,1553,1554],{},"Serialization(String)","; converts into ",[344,1557,1558],{},"sqlx::Error::Encode",[1445,1560,1561,1563,1564,371],{},[344,1562,719],{}," — all of the above plus ",[344,1565,1566],{},"vld::prelude::*",[373,1568,1570],{"id":1569},"gotchas","Gotchas",[1442,1572,1573,1595,1612,1664,1681],{},[1445,1574,1575,1582,1583,1586,1587,1589,1590,1592,1593,1581],{},[1576,1577,1578,1579,1581],"strong",{},"Column schemas need a ",[344,1580,1453],{}," field."," A wrapper validates ",[344,1584,1585],{},"{\"value\": v}"," against ",[344,1588,1457],{},", so define ",[344,1591,1457],{}," with a single ",[344,1594,1453],{},[1445,1596,1597,1600,1601,1603,1604,1607,1608,1611],{},[1576,1598,1599],{},"Decoding does not re-validate."," ",[344,1602,370],{}," builds the wrapper with ",[344,1605,1606],{},"new_unchecked"," (data from the database is trusted); call ",[344,1609,1610],{},"validate_row"," to re-check loaded data.",[1445,1613,1614,1616,1617,350,1620,367,1623,1626,1627,602,1630,602,1633,1636,1637,1639,1640,1616,1642,367,1645,602,1648,1651,1652,1655,1656,1659,1660,1636,1662,371],{},[344,1615,353],{}," decodes ",[344,1618,1619],{},"BIGINT",[344,1621,1622],{},"INTEGER",[344,1624,1625],{},"SMALLINT"," columns (Postgres ",[344,1628,1629],{},"INT8",[344,1631,1632],{},"INT4",[344,1634,1635],{},"INT2",") and encodes as ",[344,1638,1516],{},". ",[344,1641,356],{},[344,1643,1644],{},"DOUBLE",[344,1646,1647],{},"REAL",[344,1649,1650],{},"FLOAT4"," (an ",[344,1653,1654],{},"f32"," is widened through its decimal form, so ",[344,1657,1658],{},"0.1"," stays ",[344,1661,1658],{},[344,1663,1519],{},[1445,1665,1666,1667,350,1670,1673,1674,1677,1678,371],{},"A non-finite float (",[344,1668,1669],{},"NaN",[344,1671,1672],{},"±inf",") in ",[344,1675,1676],{},"VldFloat::new"," is rejected with ",[344,1679,1680],{},"not_finite",[1445,1682,1683,1685,1686,1689,1690,350,1693,350,1696,1699],{},[344,1684,1478],{}," stores the original ",[344,1687,1688],{},"T",", not the schema's output: ",[344,1691,1692],{},"with_default",[344,1694,1695],{},"trim()",[344,1697,1698],{},"coerce()"," and other transforms are checked against but never applied to the stored value.",[1701,1702,1703],"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":384,"searchDepth":405,"depth":425,"links":1705},[1706,1707,1708,1709,1710],{"id":375,"depth":405,"text":376},{"id":512,"depth":405,"text":513},{"id":681,"depth":405,"text":682},{"id":1439,"depth":405,"text":1440},{"id":1569,"depth":405,"text":1570},"Validate rows before insert and after select, and bind validated column wrappers with SQLx.","md",[1714,1719],{"label":1715,"icon":1716,"to":1717,"target":1718},"crates.io","i-simple-icons-rust","https:\u002F\u002Fcrates.io\u002Fcrates\u002Fvld-sqlx","_blank",{"label":1720,"icon":307,"to":1721,"target":1718},"docs.rs","https:\u002F\u002Fdocs.rs\u002Fvld-sqlx",{},{"title":230,"description":1711},"g1EJ3yzw08LR5Qd7keIw_VW3uY-emmRLc1bqUf4XjL8",[1726,1728],{"title":220,"path":221,"stem":222,"description":1727,"children":-1},"Generate random test data that passes your vld schemas, typed or as raw JSON, with optional seeds.",{"title":234,"path":235,"stem":236,"description":1729,"children":-1},"Validate Insertable structs before insert and use validated column types in Diesel models and filters.",1794033693016]