10个版本 (5个破坏性更新)
0.5.2 | 2021年4月4日 |
---|---|
0.5.1 | 2021年2月18日 |
0.5.0 | 2020年11月2日 |
0.4.0 | 2020年6月28日 |
0.1.0 | 2018年11月21日 |
#1793 in Rust模式
79 个月下载量
在 4 个crate中使用 (2个直接使用)
64KB
1K SLoC
动机
在Rust中模拟检查异常。
用法
- 将此crate添加到Cargo.toml中,并启用您想要的任何功能
Cargo.toml
:
[dependencies.enumx]
version = "0.4"
[dependencies.cex]
version = "0.5"
如果您想支持回溯,请添加此内容
features = ["log","pretty_log"]
src/lib.rs
:
use enumx::export::*;
use enumx::predefined::*; // or use your own enum types at your will.
use cex::*;
功能
-
作为检查异常的ad-hoc枚举。
-
回溯。
-
类型作为模式。
-
回退作为
impl Trait
。
文档
有关更多信息,请参阅 enumx 书籍。
许可证
MIT许可。
lib.rs
:
Rust的检查异常。
有关更多信息,请参阅 enumx 书籍。
功能
-
使用
Result!( Type throws A,B,.. )
,ret!()
,throw!()
在Rust中模拟检查异常 -
#[ty_pat] match
用于match表达式中的“类型作为模式匹配”。 -
可选回溯支持。
-
回退作为
impl std::error::Error
。
示例
use enumx::export::*;
use enumx::predefined::*;
use cex::*;
// accepts even numbers; rejects odd ones and report an error `String`
#[cex]
fn check_even( a: u32 ) -> Result!( u32 throws String ) {
if a % 2 == 1 {
throw!( format!( "odd numbers not allowed: a == {}", a ));
} else {
ret!( a );
}
}
// accepts non-zero numbers; rejects zeros and report an error of `&'static str`
#[cex]
fn check_nonzero( b: u32 ) -> Result!( u32 throws &'static str ) {
if b == 0 {
throw!( "zero not allowed: b == 0" );
} else {
ret!( b )
}
}
struct Underflow;
#[cex]
fn sub( a: u32, b: u32 ) -> Result!( u32 throws String, &'static str, Underflow ) {
let a = check_even( a )?;
let b = check_nonzero( b )?;
ret!( a+b );
}
#[cex]
fn distance( a: u32, b: u32 ) -> Result!( u32 throws String, &'static str ) {
ret!( sub(a,b).or_else( |err| {#[ty_pat] match err {
Underflow => ret!( b-a ),
String(s) => throw!( s ),
TyPat::<&'static str>(s) => throw!( s ),
}}))
}
#[cex]
fn distance2( a: u32, b: u32 ) -> Result!( u32 throws String, &'static str ) {
ret!( sub(a,b).or_else( |err| #[ty_pat(gen_throws)] match err {
Underflow => ret!( b-a ),
}))
}
#[cex]
fn distance3( a: u32, b: u32 ) -> Result!( u32 throws String, &'static str ) {
ret!( sub(a,b).or_else( |err| #[ty_pat(gen &'static str, String )] match err {
Underflow => ret!( b-a ),
}))
}
依赖关系
~2.5MB
~51K SLoC