2 个不稳定版本

0.2.0 2019年6月17日
0.1.0 2019年2月16日

#6 in #exit-code


用于 jp_cli

MIT/Apache

7KB

exit crates.io badge

此crate公开了一个类型 Exit,允许在 main 中使用 ? 并同时指定自定义退出状态码。

此crate的目的是提供一个关于讨论在此博客文章中的想法的示例实现。

示例

#![feature(try_trait)]
use exit::{Exit, ExitDisplay};

use std::env;
use std::option;

#[derive(Debug)]
enum MyErr {
    MissingArg,
    ParseErrorUserNum,
    ParseErrorGroupNum,
}

impl From<MyErr> for i32 {
    fn from(err: MyErr) -> Self {
        match err {
            MyErr::MissingArg => 2,
            MyErr::ParseErrorUserNum => 3,
            MyErr::ParseErrorGroupNum => 4,
        }
    }
}

// You can optionally implement ExitDisplay for your error type in order to print an error message
// on exit
impl ExitDisplay for MyErr {
    fn display(&self) -> String {
        format!("{:?}", self)
    }
}

impl From<option::NoneError> for MyErr {
    fn from(_: option::NoneError) -> Self {
        MyErr::MissingArg
    }
}

fn main() -> Exit<MyErr> {
    let user_num_string : String = env::args().skip(1).next()?;
    let group_num_string : String = env::args().skip(2).next()?;

    let user_num : u32 = user_num_string.parse()
        .map_err(|_| MyErr::ParseErrorUserNum)?;
    let group_num : u32 = group_num_string.parse()
        .map_err(|_| MyErr::ParseErrorGroupNum)?;

    println!("Hello, user #{} from group #{}!", user_num, group_num);

    Exit::Ok
}

许可证

许可协议为以下之一:

任选其一。

贡献

除非你明确说明,否则根据Apache-2.0许可证定义,你有意提交给作品包含在内的任何贡献,将根据上述方式双许可,而无需任何额外条款或条件。

无运行时依赖