2 个不稳定版本
0.2.0 | 2019年6月17日 |
---|---|
0.1.0 | 2019年2月16日 |
#6 in #exit-code
用于 jp_cli
7KB
exit
此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 License, Version 2.0, (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
贡献
除非你明确说明,否则根据Apache-2.0许可证定义,你有意提交给作品包含在内的任何贡献,将根据上述方式双许可,而无需任何额外条款或条件。