redis-derive
redis-derive copied to clipboard
Non-existent keys throw an odd error instead of `Option::None`
use redis_derive::{FromRedisValue, ToRedisArgs};
use std::collections::HashMap;
use redis::Commands;
#[derive(FromRedisValue, ToRedisArgs, Debug)]
enum Color {
Red,
Green,
}
#[derive(Default, FromRedisValue, ToRedisArgs, Debug)]
#[redis(rename_all = "snake_case")]
enum Group {
#[default]
MemberGroup,
AdminGroup,
}
#[derive(FromRedisValue, ToRedisArgs, Debug)]
struct MySuperCoolStruct {
first_field: String,
second_field: Option<i64>,
third_field: Vec<String>,
color: Color,
group: Group,
}
fn main() -> redis::RedisResult<()> {
let client = redis::Client::open("redis://127.0.0.1:6379/")?;
let mut con = client.get_connection()?;
let test1 = MySuperCoolStruct {
first_field: "Hello World".to_owned(),
second_field: Some(42),
third_field: vec!["abc".to_owned(), "cba".to_owned()],
color: Color::Red,
group: Group::AdminGroup,
};
// let _ = redis::cmd("HSET")
// .arg("test1")
// .arg(&test1)
// .query(&mut con)?;
let db_test1: MySuperCoolStruct = con.hgetall("test1")?;
println!("send : {:#?}, got : {:#?}", test1, db_test1);
let db_test1: HashMap<String, String> = con.hgetall("test1")?;
assert_eq!(db_test1["group"], "admin_group");
Ok(())
}
Error: Response was of incompatible type: "Response type not string compatible." (response was nil)
This happens because https://github.com/kkharji/redis-derive/blob/014526ffacd998d88d58b57622309e73fef96e29/src/data_struct.rs#L134 expects fields to exist and simply defaults to Nil
otherwise, which cannot be converted into String