#error #result #converter #type-safe #options #utility #libraries

mod

mod 是一个 Rust 项目,提供两个简单且有用的工具函数,用于在 Option 和 Result 类型之间进行转换

2 个版本

0.1.0 2024年6月10日

#606 in Rust 模式

GPL-3.0-or-later

7KB

mod

英语| 简体中文

简介

mod 是一个 Rust 项目,提供两个简单且有用的工具函数,用于在 OptionResult 类型之间进行转换。项目包括两个主要函数

  1. option_to_result<T, E>:将一个 Option<T> 转换为一个 Result<T, E>
  2. result_to_option<T, E>:将一个 Result<T, E> 转换为一个 Option<T>

安装

您可以通过运行以下命令将此项目添加到您的 Rust 项目中

cargo add mod

用法

首先,请确保在您的项目中包含 mod

extern crate mod;

use mod::{option_to_result, result_to_option};

函数描述

option_to_result

将一个 Option<T> 转换为一个 Result<T, E>。如果 OptionSome,它返回包装在 Ok 中的值;如果是 None,它返回指定的错误。

pub fn option_to_result<T, E>(option: Option<T>, err: E) -> Result<T, E>
where
    E: Clone,
{
    match option {
        Some(value) => Ok(value),
        None => Err(err),
    }
}

示例:

let some_value = Some(42);
let none_value: Option<i32> = None;
let error = "Error";

assert_eq!(option_to_result(some_value, error.to_string()), Ok(42));
assert_eq!(option_to_result(none_value, error.to_string()), Err("Error".to_string()));

result_to_option

将一个 Result<T, E> 转换为一个 Option<T>。如果 ResultOk,它返回包装在 Some 中的值;如果它是 Err,它返回 None

pub fn result_to_option<T, E>(result: Result<T, E>) -> Option<T>
where
    E: Clone,
{
    match result {
        Ok(value) => Some(value),
        Err(_) => None,
    }
}

示例:

let ok_result = Ok::<i32, &str>(42);
let err_result = Err::<i32, &str>("Error");

assert_eq!(result_to_option(ok_result), Some(42));
assert_eq!(result_to_option(err_result), None);

测试

本项目包含一些单元测试来验证功能的正确性。您可以通过执行以下命令来运行测试

cargo test

测试用例位于 tests 模块中,并覆盖了 option_to_resultresult_to_option 函数

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_option_to_result() {
        let some_value = Some(42);
        let none_value: Option<i32> = None;
        let error = "Error";

        assert_eq!(option_to_result(some_value, error.to_string()), Ok(42));
        assert_eq!(option_to_result(none_value, error.to_string()), Err("Error".to_string()));
    }

    #[test]
    fn test_result_to_option() {
        let ok_result = Ok::<i32, &str>(42);
        let err_result = Err::<i32, &str>("Error");

        assert_eq!(result_to_option(ok_result), Some(42));
        assert_eq!(result_to_option(err_result), None);
    }
}

许可证

本项目采用GPL许可证。有关详细信息,请参阅LICENSE文件。

贡献

欢迎贡献!请提交问题或拉取请求。


感谢您使用 mod!如果您有任何问题或建议,请随时联系我们。

无运行时依赖