10 个版本 (4 个重大更新)
新 0.4.0 | 2024年8月24日 |
---|---|
0.3.3 | 2024年8月18日 |
0.2.1 | 2024年8月15日 |
0.1.1 | 2024年8月15日 |
0.0.0 | 2024年8月15日 |
#413 在 开发工具
每月下载量 577
15KB
145 行
pipa
Rust 的管道操作库。
特性
- 将事物传入表达式链中。
- 支持不同类型。
- 支持将函数、闭包和方法返回
Try
-able 类型(Option & Result)的管道。 - 支持异步函数和异步方法返回
Try
able 类型(Option & Result)的管道。 - 支持关联函数返回
Try
-able 类型(Option & Result)的管道。 - 支持异步关联函数返回
Try
-able 类型(Option & Result)的管道。 - 支持方法调用返回
Try
-able 类型(Option & Result)的管道。 - 支持异步方法调用返回
Try
-able 类型(Option & Result)的管道。 - 支持内联闭包的管道。
- 支持使用简单紧凑的语法实现铁路导向编程模式。
示例
let ret = pipa!(123 => f => g => h);
let ret = pipa_try!(123 => f? => ? => h?);
let ret = pipa_await_try!(123 => f.await => g.await => h.await);
混合多种表达式的示例
let clo = |v: i32| -> i32 { v * 5 };
let result = p!(5
=> func
=> clo
=> func_rop?
=> func_2.await
=> func_2_rop.await?
=> obj.method
=> func
=> obj.method_rop?
=> func_rop?
=> obj.method_async.await
=> obj.method_async_rop.await?
);
let ret = p!(5
=> D::anu
=> D::anu_try?
=> D::async_anu.await
=> D::async_anu_try.await?
);
assert_eq!(ret, 9000);
let ret = p!(5
=> E::anu
=> E::anu_try?
=> E::async_anu.await
=> E::async_anu_try.await?
);
assert_eq!(ret, 3000);
// inline closure tests
let ret = p!(5 => |i32| 2 => |n: i32| n + 5);
assert_eq!(ret, 7);
dbg!(&ret);
let ret = p!(5 => |n: i32| n * 2 => |n: i32| n + 5);
assert_eq!(ret, 15);
dbg!(&ret);
let ret = p!(5 => |i32| {2} => |n: i32| n + 5);
assert_eq!(ret, 7);
dbg!(&ret);
let ret = p!(5 => |n: i32| {n * 2} => |n: i32| n + 5);
assert_eq!(ret, 15);
dbg!(&ret);
let ret = p!(5 => |i32| -> i32 {2} => |n: i32| n + 5);
assert_eq!(ret, 7);
dbg!(&ret);
let ret = p!(5 => |n: i32| -> i32 { n * 2 } => |n: i32| n + 5);
assert_eq!(ret, 15);
dbg!(&ret);
let ret = p!(2 => func_2.await => |n: i32| -> i32 { n * 4 } => func => |x: i32| x - 2 => |y: i32| -> f32 { (y / 4) as f32 } );
assert_eq!(ret, 15_f32);
dbg!(&ret);
更多详细信息请参考 tests/test.rs
& tests/mixed_test.rs
。