#error #anonymous #sum #type #io-error #forms #clone

some-error

一个用于在Rust中创建和使用匿名求和类型作为错误信息的库

1个不稳定版本

0.5.0 2020年11月18日

#39#anonymous

MIT 许可证

10KB
146

一个库,允许在返回结果的错误中使用匿名求和类型。此库附加到的函数必须以如下形式返回类型:Result<T, E1 + E2 + ...>.

示例

use std::io;
use some_error::*;

#[derive(Debug, Clone, Copy)]
struct NotZeroError(u32);

#[some_error]
fn my_func() -> Result<(), io::Error + NotZeroError>{
    let x = 3;
    if x != 0 {
        Err(NotZeroError(x))?;
    }

    Ok(())
}

fn main() {
    match my_func() {
        Ok(_) => {
            println!("Worked ok!");
        }
        Err(my_func::NotZeroError(NotZeroError(x))) => {
            println!("{} is not zero!!", x);
        }
        Err(my_func::io::Error(io_err)) => {
            println!("io error: {:?}", io_err);
        }
    }
}

依赖项

~1.5MB
~34K SLoC