我正在制作一个使用 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 { }
}
}