[{"data":1,"prerenderedAt":1494},["ShallowReactive",2],{"navigation":3,"\u002Fintegrations\u002Fmessaging\u002Fredis":335,"\u002Fintegrations\u002Fmessaging\u002Fredis-surround":1489},[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":252,"body":337,"description":1475,"extension":1476,"links":1477,"meta":1486,"navigation":671,"path":253,"seo":1487,"stem":254,"__hash__":1488},"docs\u002F6.integrations\u002F5.messaging\u002F1.redis.md",{"type":338,"value":339,"toc":1468},"minimark",[340,347,352,417,428,432,523,551,618,625,629,1231,1235,1339,1343,1464],[341,342,343,346],"p",{},[344,345,252],"code",{}," wraps a sync or async Redis connection. Values are validated and stored as JSON on write, and decoded and validated on read.",[348,349,351],"h2",{"id":350},"install","Install",[353,354,360],"pre",{"className":355,"code":356,"filename":357,"language":358,"meta":359,"style":359},"language-toml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","[dependencies]\nvld = \"0.5\"\nvld-redis = \"0.5\"  # redis 0.x (>=0.32) by default\n","Cargo.toml","toml","",[344,361,362,378,398],{"__ignoreMap":359},[363,364,367,371,375],"span",{"class":365,"line":366},"line",1,[363,368,370],{"class":369},"sMK4o","[",[363,372,374],{"class":373},"sBMFI","dependencies",[363,376,377],{"class":369},"]\n",[363,379,381,385,388,391,395],{"class":365,"line":380},2,[363,382,384],{"class":383},"sTEyZ","vld ",[363,386,387],{"class":369},"=",[363,389,390],{"class":369}," \"",[363,392,394],{"class":393},"sfazB","0.5",[363,396,397],{"class":369},"\"\n",[363,399,401,404,406,408,410,413],{"class":365,"line":400},3,[363,402,403],{"class":383},"vld-redis ",[363,405,387],{"class":369},[363,407,390],{"class":369},[363,409,394],{"class":393},[363,411,412],{"class":369},"\"",[363,414,416],{"class":415},"sHwdD","  # redis 0.x (>=0.32) by default\n",[341,418,419,420,423,424,427],{},"The selected ",[344,421,422],{},"redis"," crate is re-exported as ",[344,425,426],{},"vld_redis::redis",", so you do not need a separate dependency.",[348,429,431],{"id":430},"features","Features",[433,434,435,451],"table",{},[436,437,438],"thead",{},[439,440,441,445,448],"tr",{},[442,443,444],"th",{},"Feature",[442,446,447],{},"Default",[442,449,450],{},"Effect",[452,453,454,473,487,505],"tbody",{},[439,455,456,462,465],{},[457,458,459],"td",{},[344,460,461],{},"redis-0",[457,463,464],{},"yes",[457,466,467,469,470],{},[344,468,422],{}," ",[344,471,472],{},">=0.32, \u003C1",[439,474,475,480,482],{},[457,476,477],{},[344,478,479],{},"redis-1",[457,481],{},[457,483,484,486],{},[344,485,422],{}," 1.x",[439,488,489,494,496],{},[457,490,491],{},[344,492,493],{},"aio",[457,495],{},[457,497,498,501,502],{},[344,499,500],{},"AsyncRedisConn"," over ",[344,503,504],{},"redis::aio::ConnectionLike",[439,506,507,512,514],{},[457,508,509],{},[344,510,511],{},"aio-tokio",[457,513],{},[457,515,516,518,519,522],{},[344,517,493],{}," plus redis' tokio support (",[344,520,521],{},"tokio-comp",")",[341,524,525,526,528,529,531,532,534,535,537,538,540,541,543,544,547,548,550],{},"Exactly one of ",[344,527,461],{}," \u002F ",[344,530,479],{}," must be enabled. ",[344,533,422],{}," refuses to compile ",[344,536,493],{}," without a runtime: use ",[344,539,511],{},", or enable ",[344,542,493],{}," together with a runtime feature (",[344,545,546],{},"smol-comp",", …) on your own ",[344,549,422],{}," dependency of the same version.",[353,552,554],{"className":355,"code":553,"language":358,"meta":359,"style":359},"vld-redis = { version = \"0.5\", default-features = false, features = [\"redis-1\", \"aio-tokio\"] }\n",[344,555,556],{"__ignoreMap":359},[363,557,558,560,562,565,568,570,572,574,576,579,582,584,588,590,593,595,598,600,602,604,606,608,610,612,615],{"class":365,"line":366},[363,559,403],{"class":383},[363,561,387],{"class":369},[363,563,564],{"class":369}," {",[363,566,567],{"class":383}," version ",[363,569,387],{"class":369},[363,571,390],{"class":369},[363,573,394],{"class":393},[363,575,412],{"class":369},[363,577,578],{"class":369},",",[363,580,581],{"class":383}," default-features ",[363,583,387],{"class":369},[363,585,587],{"class":586},"sfNiH"," false",[363,589,578],{"class":369},[363,591,592],{"class":383}," features ",[363,594,387],{"class":369},[363,596,597],{"class":369}," [",[363,599,412],{"class":369},[363,601,479],{"class":393},[363,603,412],{"class":369},[363,605,578],{"class":369},[363,607,390],{"class":369},[363,609,511],{"class":393},[363,611,412],{"class":369},[363,613,614],{"class":369},"]",[363,616,617],{"class":369}," }\n",[341,619,620,621,624],{},"MSRV: 1.85 (see ",[622,623,23],"a",{"href":24},").",[348,626,628],{"id":627},"example","Example",[353,630,634],{"className":631,"code":632,"language":633,"meta":359,"style":359},"language-rust shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","use vld_redis::prelude::*;\nuse vld_redis::redis;\n\nvld::schema! {\n    #[derive(Debug, serde::Serialize)]\n    pub struct UserSchema {\n        pub name: String => vld::string().min(1).max(100),\n        pub email: String => vld::string().email(),\n    }\n}\n\nfn main() -> Result\u003C(), Box\u003Cdyn std::error::Error>> {\n    let client = redis::Client::open(\"redis:\u002F\u002F127.0.0.1\u002F\")?;\n    let mut conn = RedisConn::new(client.get_connection()?);\n\n    let alice = UserSchema { name: \"Alice\".into(), email: \"alice@example.com\".into() };\n    conn.set(\"user:1\", &alice)?;\n    let loaded: Option\u003CUserSchema> = conn.get(\"user:1\")?;\n    assert_eq!(loaded.unwrap().email, \"alice@example.com\");\n\n    let bad = UserSchema { name: \"\".into(), email: \"nope\".into() };\n    assert!(matches!(conn.set(\"user:2\", &bad), Err(VldRedisError::Validation(_))));\n    Ok(())\n}\n","rust",[344,635,636,654,667,673,688,716,731,781,809,815,821,826,874,910,945,950,1003,1033,1075,1106,1111,1157,1217,1226],{"__ignoreMap":359},[363,637,638,642,645,648,651],{"class":365,"line":366},[363,639,641],{"class":640},"sbssI","use",[363,643,644],{"class":373}," vld_redis",[363,646,647],{"class":369},"::",[363,649,650],{"class":373},"prelude",[363,652,653],{"class":369},"::*;\n",[363,655,656,658,660,662,664],{"class":365,"line":380},[363,657,641],{"class":640},[363,659,644],{"class":373},[363,661,647],{"class":369},[363,663,422],{"class":373},[363,665,666],{"class":369},";\n",[363,668,669],{"class":365,"line":400},[363,670,672],{"emptyLinePlaceholder":671},true,"\n",[363,674,676,679,681,685],{"class":365,"line":675},4,[363,677,678],{"class":373},"vld",[363,680,647],{"class":369},[363,682,684],{"class":683},"s2Zo4","schema!",[363,686,687],{"class":369}," {\n",[363,689,691,694,697,700,703,705,708,710,713],{"class":365,"line":690},5,[363,692,693],{"class":369},"    #[",[363,695,696],{"class":383},"derive",[363,698,699],{"class":369},"(",[363,701,702],{"class":373},"Debug",[363,704,578],{"class":369},[363,706,707],{"class":383}," serde",[363,709,647],{"class":369},[363,711,712],{"class":373},"Serialize",[363,714,715],{"class":369},")]\n",[363,717,719,723,726,729],{"class":365,"line":718},6,[363,720,722],{"class":721},"spNyl","    pub",[363,724,725],{"class":721}," struct",[363,727,728],{"class":373}," UserSchema",[363,730,687],{"class":369},[363,732,734,737,740,743,746,749,752,754,757,760,763,765,768,770,773,775,778],{"class":365,"line":733},7,[363,735,736],{"class":721},"        pub",[363,738,739],{"class":383}," name",[363,741,742],{"class":369},":",[363,744,745],{"class":373}," String",[363,747,748],{"class":369}," =>",[363,750,751],{"class":373}," vld",[363,753,647],{"class":369},[363,755,756],{"class":683},"string",[363,758,759],{"class":369},"().",[363,761,762],{"class":683},"min",[363,764,699],{"class":369},[363,766,767],{"class":640},"1",[363,769,624],{"class":369},[363,771,772],{"class":683},"max",[363,774,699],{"class":369},[363,776,777],{"class":640},"100",[363,779,780],{"class":369},"),\n",[363,782,784,786,789,791,793,795,797,799,801,803,806],{"class":365,"line":783},8,[363,785,736],{"class":721},[363,787,788],{"class":383}," email",[363,790,742],{"class":369},[363,792,745],{"class":373},[363,794,748],{"class":369},[363,796,751],{"class":373},[363,798,647],{"class":369},[363,800,756],{"class":683},[363,802,759],{"class":369},[363,804,805],{"class":683},"email",[363,807,808],{"class":369},"(),\n",[363,810,812],{"class":365,"line":811},9,[363,813,814],{"class":369},"    }\n",[363,816,818],{"class":365,"line":817},10,[363,819,820],{"class":369},"}\n",[363,822,824],{"class":365,"line":823},11,[363,825,672],{"emptyLinePlaceholder":671},[363,827,829,832,835,838,841,844,847,850,853,856,859,861,864,866,869,872],{"class":365,"line":828},12,[363,830,831],{"class":640},"fn",[363,833,834],{"class":683}," main",[363,836,837],{"class":369},"()",[363,839,840],{"class":369}," ->",[363,842,843],{"class":373}," Result",[363,845,846],{"class":369},"\u003C(),",[363,848,849],{"class":373}," Box",[363,851,852],{"class":369},"\u003C",[363,854,855],{"class":640},"dyn",[363,857,858],{"class":383}," std",[363,860,647],{"class":369},[363,862,863],{"class":383},"error",[363,865,647],{"class":369},[363,867,868],{"class":373},"Error",[363,870,871],{"class":369},">>",[363,873,687],{"class":369},[363,875,877,880,883,885,888,890,893,895,898,900,902,905,907],{"class":365,"line":876},13,[363,878,879],{"class":721},"    let",[363,881,882],{"class":383}," client ",[363,884,387],{"class":369},[363,886,887],{"class":373}," redis",[363,889,647],{"class":369},[363,891,892],{"class":373},"Client",[363,894,647],{"class":369},[363,896,897],{"class":683},"open",[363,899,699],{"class":369},[363,901,412],{"class":369},[363,903,904],{"class":393},"redis:\u002F\u002F127.0.0.1\u002F",[363,906,412],{"class":369},[363,908,909],{"class":369},")?;\n",[363,911,913,915,918,921,923,926,928,931,933,936,939,942],{"class":365,"line":912},14,[363,914,879],{"class":721},[363,916,917],{"class":721}," mut",[363,919,920],{"class":383}," conn ",[363,922,387],{"class":369},[363,924,925],{"class":373}," RedisConn",[363,927,647],{"class":369},[363,929,930],{"class":683},"new",[363,932,699],{"class":369},[363,934,935],{"class":383},"client",[363,937,938],{"class":369},".",[363,940,941],{"class":683},"get_connection",[363,943,944],{"class":369},"()?);\n",[363,946,948],{"class":365,"line":947},15,[363,949,672],{"emptyLinePlaceholder":671},[363,951,953,955,958,960,962,964,966,968,970,973,975,977,980,983,985,987,989,992,994,996,998,1000],{"class":365,"line":952},16,[363,954,879],{"class":721},[363,956,957],{"class":383}," alice ",[363,959,387],{"class":369},[363,961,728],{"class":373},[363,963,564],{"class":369},[363,965,739],{"class":383},[363,967,742],{"class":369},[363,969,390],{"class":369},[363,971,972],{"class":393},"Alice",[363,974,412],{"class":369},[363,976,938],{"class":369},[363,978,979],{"class":683},"into",[363,981,982],{"class":369},"(),",[363,984,788],{"class":383},[363,986,742],{"class":369},[363,988,390],{"class":369},[363,990,991],{"class":393},"alice@example.com",[363,993,412],{"class":369},[363,995,938],{"class":369},[363,997,979],{"class":683},[363,999,837],{"class":369},[363,1001,1002],{"class":369}," };\n",[363,1004,1006,1009,1011,1014,1016,1018,1021,1023,1025,1028,1031],{"class":365,"line":1005},17,[363,1007,1008],{"class":383},"    conn",[363,1010,938],{"class":369},[363,1012,1013],{"class":683},"set",[363,1015,699],{"class":369},[363,1017,412],{"class":369},[363,1019,1020],{"class":393},"user:1",[363,1022,412],{"class":369},[363,1024,578],{"class":369},[363,1026,1027],{"class":369}," &",[363,1029,1030],{"class":383},"alice",[363,1032,909],{"class":369},[363,1034,1036,1038,1041,1043,1046,1048,1051,1054,1057,1060,1062,1065,1067,1069,1071,1073],{"class":365,"line":1035},18,[363,1037,879],{"class":721},[363,1039,1040],{"class":383}," loaded",[363,1042,742],{"class":369},[363,1044,1045],{"class":373}," Option",[363,1047,852],{"class":369},[363,1049,1050],{"class":373},"UserSchema",[363,1052,1053],{"class":369},">",[363,1055,1056],{"class":369}," =",[363,1058,1059],{"class":383}," conn",[363,1061,938],{"class":369},[363,1063,1064],{"class":683},"get",[363,1066,699],{"class":369},[363,1068,412],{"class":369},[363,1070,1020],{"class":393},[363,1072,412],{"class":369},[363,1074,909],{"class":369},[363,1076,1078,1081,1083,1086,1088,1091,1093,1095,1097,1099,1101,1103],{"class":365,"line":1077},19,[363,1079,1080],{"class":683},"    assert_eq!",[363,1082,699],{"class":369},[363,1084,1085],{"class":383},"loaded",[363,1087,938],{"class":369},[363,1089,1090],{"class":683},"unwrap",[363,1092,759],{"class":369},[363,1094,805],{"class":383},[363,1096,578],{"class":369},[363,1098,390],{"class":369},[363,1100,991],{"class":393},[363,1102,412],{"class":369},[363,1104,1105],{"class":369},");\n",[363,1107,1109],{"class":365,"line":1108},20,[363,1110,672],{"emptyLinePlaceholder":671},[363,1112,1114,1116,1119,1121,1123,1125,1127,1129,1132,1134,1136,1138,1140,1142,1144,1147,1149,1151,1153,1155],{"class":365,"line":1113},21,[363,1115,879],{"class":721},[363,1117,1118],{"class":383}," bad ",[363,1120,387],{"class":369},[363,1122,728],{"class":373},[363,1124,564],{"class":369},[363,1126,739],{"class":383},[363,1128,742],{"class":369},[363,1130,1131],{"class":369}," \"\"",[363,1133,938],{"class":369},[363,1135,979],{"class":683},[363,1137,982],{"class":369},[363,1139,788],{"class":383},[363,1141,742],{"class":369},[363,1143,390],{"class":369},[363,1145,1146],{"class":393},"nope",[363,1148,412],{"class":369},[363,1150,938],{"class":369},[363,1152,979],{"class":683},[363,1154,837],{"class":369},[363,1156,1002],{"class":369},[363,1158,1160,1163,1165,1168,1170,1173,1175,1177,1179,1181,1184,1186,1188,1190,1193,1196,1199,1201,1204,1206,1209,1211,1214],{"class":365,"line":1159},22,[363,1161,1162],{"class":683},"    assert!",[363,1164,699],{"class":369},[363,1166,1167],{"class":683},"matches!",[363,1169,699],{"class":369},[363,1171,1172],{"class":383},"conn",[363,1174,938],{"class":369},[363,1176,1013],{"class":683},[363,1178,699],{"class":369},[363,1180,412],{"class":369},[363,1182,1183],{"class":393},"user:2",[363,1185,412],{"class":369},[363,1187,578],{"class":369},[363,1189,1027],{"class":369},[363,1191,1192],{"class":383},"bad",[363,1194,1195],{"class":369},"),",[363,1197,1198],{"class":373}," Err",[363,1200,699],{"class":369},[363,1202,1203],{"class":373},"VldRedisError",[363,1205,647],{"class":369},[363,1207,1208],{"class":683},"Validation",[363,1210,699],{"class":369},[363,1212,1213],{"class":383},"_",[363,1215,1216],{"class":369},"))));\n",[363,1218,1220,1223],{"class":365,"line":1219},23,[363,1221,1222],{"class":373},"    Ok",[363,1224,1225],{"class":369},"(())\n",[363,1227,1229],{"class":365,"line":1228},24,[363,1230,820],{"class":369},[348,1232,1234],{"id":1233},"api","API",[1236,1237,1238,1262,1277,1323],"ul",{},[1239,1240,1241,1244,1245,1248,1249,1251,1252,1251,1255,528,1258,1261],"li",{},[344,1242,1243],{},"RedisConn\u003CC>"," — sync wrapper over ",[344,1246,1247],{},"redis::ConnectionLike","; ",[344,1250,930],{},", ",[344,1253,1254],{},"into_inner",[344,1256,1257],{},"Deref",[344,1259,1260],{},"DerefMut"," to the connection.",[1239,1263,1264,1267,1268,1270,1271,1274,1275,938],{},[344,1265,1266],{},"AsyncRedisConn\u003CC>"," (",[344,1269,493],{},") — the same methods, ",[344,1272,1273],{},"async",", over ",[344,1276,504],{},[1239,1278,1279,1280,528,1282,1251,1284,528,1287,1251,1290,528,1293,1251,1296,528,1299,528,1302,528,1305,1251,1308,528,1311,1251,1314,528,1317,1251,1320,938],{},"Validating commands: ",[344,1281,1013],{},[344,1283,1064],{},[344,1285,1286],{},"mset",[344,1288,1289],{},"mget",[344,1291,1292],{},"hset",[344,1294,1295],{},"hget",[344,1297,1298],{},"lpush",[344,1300,1301],{},"rpush",[344,1303,1304],{},"lpop",[344,1306,1307],{},"rpop",[344,1309,1310],{},"sadd",[344,1312,1313],{},"smembers",[344,1315,1316],{},"zadd",[344,1318,1319],{},"zrange",[344,1321,1322],{},"publish",[1239,1324,1325,1327,1328,1251,1330,1251,1333,1251,1336,938],{},[344,1326,1203],{}," — ",[344,1329,1208],{},[344,1331,1332],{},"Serialization",[344,1334,1335],{},"Deserialization",[344,1337,1338],{},"Redis(RedisError)",[348,1340,1342],{"id":1341},"gotchas","Gotchas",[1236,1344,1345,1366,1456],{},[1239,1346,1347,1351,1352,1355,1356,1358,1359,1362,1363,938],{},[1348,1349,1350],"strong",{},"The value type is the schema."," Written values must be ",[344,1353,1354],{},"Serialize + VldParse"," (a ",[344,1357,684],{}," struct with ",[344,1360,1361],{},"#[derive(serde::Serialize)]","); read values are parsed with ",[344,1364,1365],{},"VldParse",[1239,1367,1368,469,1377,1380,1381,1383,1384,1251,1387,1251,1390,1393,1394,1396,1397],{},[1348,1369,1370,1371,528,1374,938],{},"The wrapper's methods shadow ",[344,1372,1373],{},"redis::Commands",[344,1375,1376],{},"redis::AsyncCommands",[344,1378,1379],{},"conn.get(k)"," is always the validating JSON ",[344,1382,1064],{},". Commands without a validating version (",[344,1385,1386],{},"del",[344,1388,1389],{},"expire",[344,1391,1392],{},"incr",", …) go through ",[344,1395,1257],{},". To call the native one, use the trait on the inner connection:",[353,1398,1400],{"className":631,"code":1399,"language":633,"meta":359,"style":359},"let raw: Option\u003CString> = redis::Commands::get(&mut *conn, \"key\")?;\n",[344,1401,1402],{"__ignoreMap":359},[363,1403,1404,1407,1410,1412,1414,1416,1419,1421,1423,1425,1427,1430,1432,1434,1437,1440,1443,1445,1447,1449,1452,1454],{"class":365,"line":366},[363,1405,1406],{"class":721},"let",[363,1408,1409],{"class":383}," raw",[363,1411,742],{"class":369},[363,1413,1045],{"class":373},[363,1415,852],{"class":369},[363,1417,1418],{"class":373},"String",[363,1420,1053],{"class":369},[363,1422,1056],{"class":369},[363,1424,887],{"class":373},[363,1426,647],{"class":369},[363,1428,1429],{"class":373},"Commands",[363,1431,647],{"class":369},[363,1433,1064],{"class":683},[363,1435,1436],{"class":369},"(&",[363,1438,1439],{"class":721},"mut",[363,1441,1442],{"class":369}," *",[363,1444,1172],{"class":383},[363,1446,578],{"class":369},[363,1448,390],{"class":369},[363,1450,1451],{"class":393},"key",[363,1453,412],{"class":369},[363,1455,909],{"class":369},[1239,1457,1458,1459,1461,1462,938],{},"A stored value that is not valid JSON fails with ",[344,1460,1335],{},"; valid JSON that fails the schema fails with ",[344,1463,1208],{},[1465,1466,1467],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}",{"title":359,"searchDepth":380,"depth":400,"links":1469},[1470,1471,1472,1473,1474],{"id":350,"depth":380,"text":351},{"id":430,"depth":380,"text":431},{"id":627,"depth":380,"text":628},{"id":1233,"depth":380,"text":1234},{"id":1341,"depth":380,"text":1342},"A Redis connection wrapper that validates JSON payloads on write and on read.","md",[1478,1483],{"label":1479,"icon":1480,"to":1481,"target":1482},"crates.io","i-simple-icons-rust","https:\u002F\u002Fcrates.io\u002Fcrates\u002Fvld-redis","_blank",{"label":1484,"icon":307,"to":1485,"target":1482},"docs.rs","https:\u002F\u002Fdocs.rs\u002Fvld-redis",{},{"title":252,"description":1475},"SAlOtRafzrzg5DB2UW-AAFOYXMQ3JhGplfAp1pNrKWg",[1490,1492],{"title":242,"path":243,"stem":244,"description":1491,"children":-1},"Validate JSON documents before create, insert and merge, and after select — with any SurrealDB SDK.",{"title":256,"path":257,"stem":258,"description":1493,"children":-1},"A lapin channel wrapper that validates RabbitMQ message payloads before publish and after consume.",1794036362573]