rust中删除redis键时如何记录失败错误实体

d7v8vwbk  于 2023-03-30  发布在  Redis
关注(0)|答案(1)|浏览(112)

我正在使用此代码删除redis中的redis键:

let del_result = del_redis_key(&del_key).await;
    match del_result {
        Ok(success) => {
            info!("increment delete success...")
        }
        Err(failed) => {
            let failed_data = serde_json::to_string(&failed.as_result()).unwrap();
            info!("increment delete failed...,{}",failed_data);
        }
    };

当删除redis key失败时,我想注销错误消息,但当我试图记录错误(log = "0.4")时,编译时显示错误:

error[E0599]: no method named `as_result` found for enum `mobc_error::Error` in the current scope
  --> src/biz/music/songs_controller.rs:66:61
   |
66 |             let failed_data = serde_json::to_string(&failed.as_result()).unwrap();
   |                                                             ^^^^^^^^^ method not found in `mobc_error::Error`
   |

我应该怎么做才能注销错误信息?顺便说一句,这是删除redis键功能看起来像:

pub async fn del_redis_key(key: &str,) -> Result<()> {
    let config_redis_string = getConfig("redisConnectionStr");
    let REDIS_CON_STRING: &str = config_redis_string.as_str();
    let redis_client = redis::Client::open(REDIS_CON_STRING).expect("can create redis client");
    let mut redis_conn = get_con(redis_client);
    let mut redis_conn_unwrap = redis_conn.unwrap();
    let del_result = redis_conn_unwrap.del(key).map_err(RedisCMDError)?;
    FromRedisValue::from_redis_value(&del_result).map_err(|e| RedisTypeError(e).into())
}
yacmzcpb

yacmzcpb1#

如果你的另一个post中的Error枚举是如何定义mobc_error::Error的,它看起来不像@Kendas指出的那样有as_result方法。
然而,我注意到enum的每个变体都用thiserror的#[error(“...”)]消息注解。这意味着thiserror已经为enum生成了Display实现,并且可以显示与具体变体相关的错误消息。如果是这样的话,我认为您可以通过以下方式简化代码。给予一下。

Err(failed) => {
    info!("increment delete failed...,{}", failed);
}

相关问题