#error #error-handling #result #derive-error #debugging #map-err #error-conversion

and_then_map_err

提供无需中间map_err调用即可链式操作不同错误类型的特质

1 个稳定版本

1.0.0 2024年8月7日

#1958 in Rust模式

Download history 131/week @ 2024-08-05

每月131次下载

MIT许可证

10KB

and-then-map-err

提供无需中间map_err调用即可链式操作不同错误类型的Result特质。


lib.rs:

and_then_map_err

and_then_map_err提供无需中间map_err调用即可链式操作不同错误类型的特质。这允许通过在链式操作之间转换错误类型来更灵活地处理错误。

特性

  • AndThenMapErr特质:允许在可以转换错误类型的情况下链式操作Result操作。
  • MapErrAndThen特质:允许在链式操作之前映射初始Result的错误类型。

示例

use thiserror::Error;
use and_then_map_err::{AndThenMapErr, MapErrAndThen};

#[derive(Error, Debug, Eq, PartialEq)]
pub enum ParentError {
    #[error("parent error: {0}")]
    Parent(String),
    #[error("parent error from child error: {0}")]
    FromChild(#[from] ChildError),
}

#[derive(Error, Debug, Eq, PartialEq)]
pub enum ChildError {
    #[error("child error: {0}")]
    Child(String),
}

let result_or_parent_err: Result<(), ParentError> = Ok(());
let new_result_or_parent_err: Result<(), ParentError> = result_or_parent_err.and_then_map_err(|x| {
    Err(ChildError::Child("error occurred afterwards".to_string()))
});
assert_eq!(new_result_or_parent_err, Err(ParentError::FromChild(ChildError::Child("error occurred afterwards".to_string()))));

let result_or_child_err: Result<(), ChildError> = Err(ChildError::Child("initial error".to_string()));
let new_result_or_parent_err: Result<(), ParentError> = result_or_child_err.map_err_and_then(|x| {
    Ok(x)
});
assert_eq!(new_result_or_parent_err, Err(ParentError::FromChild(ChildError::Child("initial error".to_string()))));

无运行时依赖