请教封装返回泛型数据的问题?

我尝试对redis进行一个简单的封装,遇到返回泛型数据的问题。代码如果下,我希望获取数据时能用泛型指定数据类型:

pub trait Cache {
    async fn get<T>(&self, key: &str) -> Result<T, Error>;
}

实现方法如下:

impl Cache for Redis {
    async fn get<T>(&self, key: &str)-> Result<T, Error> {
        let r = self.conn.get(key).await?;
        Ok(r)
    }
}

提示如下错误:

error[E0277]: the trait bound `T: FromRedisValue` is not satisfied
    --> src/redis.rs:55:21
     |
55   |         let r = self.conn.get(key).await?;
     |                           ^^^ the trait `FromRedisValue` is not implemented for `T`
     |

请问如果不改 T 为 T: FromRedisValue的话,有什么其他解决办法吗?谢谢

阅读 1.6k
1 个回答
use redis::{AsyncCommands, RedisError};

pub trait Cache {
    type Output;

    async fn get<T>(&self, key: &str) -> Result<Self::Output, RedisError>;
}

impl Cache for redis::Client {
    type Output = String;

    async fn get<T>(&self, key: &str) -> Result<Self::Output, RedisError> {
        let mut conn = self.get_async_connection().await?;
        let r: Self::Output = conn.get(key).await?;
        Ok(r)
    }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进