0

我正在制作一个使用 Redis 客户端的基于 Tonic 的 gRPC 微服务。我想不出在发生异步错误时将 a 隐式转换RedisError为 a的示例。tonic::Status

async fn make_transaction(
        &self,
        request: Request<TransactionRequest>,
    ) -> Result<Response<TransactionResponse>, Status> {

    let mut con = self.client.get_async_connection().await?;
    con.set("my_key", 42).await?;

来自 Redis 客户端的连接可能会失败以及设置失败。我正在使用使用 Tokio 的异步接口。我宁愿不要map错误,因为这似乎破坏了异步。

我在想我需要实现这个特性From<Status>From<RedisError但不知道该怎么做。这是我的尝试,但它不起作用,因为 Tonic 想要一个tonic::Status结构而不是ApiError我制作的结构:


pub struct ApiError {
}

impl From<tonic::Status> for ApiError {
    fn from(err: Status) -> ApiError {
        ApiError {  }
    }
}

impl From<RedisError> for Status {
    fn from(err: redis::RedisError) -> ApiError {
        ApiError {  }
    }
}
4

0 回答 0