#options #result #convert

no-std opt2r

一个简单的 crate(库),提供将 Option 转换为 Result 的方法。

1 个不稳定版本

0.2.1 2024 年 4 月 10 日
0.2.0 2024 年 4 月 9 日
0.1.4 2024 年 4 月 8 日

19#result 中排名

Download history 4/week @ 2024-05-20

每月 262 次下载

MIT 许可证

6KB
93

opt2r


lib.rs:

一个简单的 crate(库),提供将 Option 转换为 Result 的方法。

使用方法

use opt2r::OptionToResult;

const CUSTOM_ERROR_CODE_OPTION_IS_NONE: i32 = 1;
const CUSTOM_ERROR_STR_OPTION_IS_NONE: &str = "Custom Error: Option is None.";

fn example1() -> opt2r::Result<()> {
    let a = make_some().ok_or_()?;
    let a = make_some().ok_or(opt2r::opt_is_none!())?;

    let b = make_none().ok_or_()?;

    Ok(())
}

fn example2() -> Result<(), i32> {
    let a = make_some().ok_or(opt2r::opt_is_none_i32!())?;

    //let b = make_none().ok_or_()?;
    let b = make_none().ok_or(opt2r::err!(CUSTOM_ERROR_CODE_OPTION_IS_NONE))?;

    Ok(())
}

fn example3() -> Result<(), String> {
    let a = make_some().ok_or_()?;
    let a = make_some().ok_or(opt2r::opt_is_none!())?;
    let a = make_some().ok_or(opt2r::err!(CUSTOM_ERROR_STR_OPTION_IS_NONE))?;
    let a = make_some().ok_or(opt2r::Error::new(CUSTOM_ERROR_STR_OPTION_IS_NONE))?;

    let b = make_none().ok_or_()?;

    Ok(())
}

fn example4() -> Result<(), Box<dyn opt2r::StdError>> {
    let a = make_some().ok_or_()?;
    let a = make_some().ok_or(opt2r::opt_is_none!())?;

    let b = make_none().ok_or_()?;

    Ok(())
}

fn main() {
    if let Err(err) = example1() {
        println!("example1 err={}, {}", err, err.error_value());
    }

    if let Err(err) = example2() {
        println!("example2 err={}", err);
    }

    if let Err(err) = example3() {
        println!("example3 err={}", err);
    }

    //example4().unwrap();
    if let Err(err) = example4() {
        println!("example4 err={}", err);
    }
}

fn make_some() -> Option<i32> {
    Some(100)
}

fn make_none() -> Option<f64> {
    None
}

无运行时依赖

特性