2 个版本
0.1.0 | 2024年6月10日 |
---|
#606 in Rust 模式
7KB
mod
英语| 简体中文
简介
mod
是一个 Rust 项目,提供两个简单且有用的工具函数,用于在 Option
和 Result
类型之间进行转换。项目包括两个主要函数
option_to_result<T, E>
:将一个Option<T>
转换为一个Result<T, E>
。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>
。如果 Option
是 Some
,它返回包装在 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>
。如果 Result
是 Ok
,它返回包装在 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_result
和 result_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
!如果您有任何问题或建议,请随时联系我们。