redispatch 0.0.2

serialization and deserialization for redis
Documentation
use redis::aio::{Connection, ConnectionLike};
use redis::{cmd, AsyncCommands, FromRedisValue, RedisFuture, ToRedisArgs};
use serde::{Serialize, de::DeserializeOwned};

#[async_trait::async_trait]
trait JsonSerdeCommands: AsyncCommands {
    async fn get<'a, K, RV>(&'a mut self, key: K) -> Option<RV>
    where
        K: Serialize + Send + Sync + 'a,
        RV: DeserializeOwned,
    {
        let data: Option<Vec<u8>> = AsyncCommands::get(self, serde_json::to_string(&key).unwrap())
            .await
            .unwrap();
        if let Some(data) = data {
            Some(serde_json::from_slice(data.as_slice()).unwrap())
        } else {
            None
        }
    }

    async fn set<'a, K, V, RV>(&'a mut self, key: K, value: V) -> ()
    where
        K: Serialize + Send + Sync + 'a,
        V: Serialize + Send + Sync + 'a,
    {
        AsyncCommands::set::<_, _, ()>(
            self,
            serde_json::to_string(&key).unwrap(),
            serde_json::to_string(&value).unwrap(),
        )
        .await
        .unwrap();
    }
}