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开发工具

Download history 292/week @ 2024-08-10 285/week @ 2024-08-17

每月下载量 577

MIT 许可证

15KB
145

pipa

Rust 的管道操作库。

特性

  • 将事物传入表达式链中。
  • 支持不同类型。
  • 支持将函数、闭包和方法返回 Try-able 类型(Option & Result)的管道。
  • 支持异步函数和异步方法返回 Tryable 类型(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

无运行时依赖