#stream #future #async #traits

无 std percolate

又一个异步实用库

3 个版本

0.0.3 2021 年 6 月 2 日
0.0.2 2021 年 5 月 30 日
0.0.1 2021 年 5 月 28 日

#stream 中排名第 651

MIT/Apache

61KB
1.5K SLoC

percolate

Lib.rs Crates.io Docs.rs

Rust 1.51 CI Crates.io - License

GitHub open issues open pull requests crev reviews

又一个异步实用库。

注意:在这些 0.x 版本中,API 可能会包含不完整的排列组合。

我主要因为这个库需要用于我的其他项目,但如果你想看到一个特定的功能,请随意 提交问题

安装

请使用 cargo-edit 来始终添加此库的最新版本

cargo add percolate

示例

use ergo_pin::ergo_pin;
use percolate::projection::{AsyncMut, IntoProjectionMut, ProjectionMut};
use pollster::block_on;
use tap::Conv;

#[ergo_pin]
async fn project<A, B, X>(value: A, projection: impl IntoProjectionMut<A, B, X>) -> B {
    pin!(
        projection.into_projection_mut() // impl ProjectionMut<A, B>
    )                                    // Pin<&mut impl ProjectionMut<A, B>>
        .project(value)                  // PinHandleMut<dyn Future<B>>
        .await                           // B
}

assert_eq!(block_on(project(1, |x: u8| x + 1)), 2);
assert_eq!(
    block_on(project(
        1,
        // Type inference doesn't understand this on its own (yet), unfortunately.
        // We can instead pass the projection pre-converted.
        (|x| async move { x + 1 }).conv::<AsyncMut<_, _, _, _>>()),
    ),
    2,
);

许可证

许可方式为以下之一

任选其一。

贡献

除非你明确说明,否则根据 Apache-2.0 许可证定义,你提交的任何有意包含在作品中的贡献都将按照上述方式双许可,不附加任何额外条款或条件。

行为准则

变更日志

版本控制

percolate 严格遵循 语义版本控制 2.0.0,但有以下例外

  • 在主要版本变更时,次要版本不会重置为 0(除非是 v1)。
    它被视为全局功能级别。
  • 在主要或次要版本变更时,修补程序版本不会重置为 0(除非是 v0.1 和 v1)。
    它被视为全局修补程序级别。

这包括上述 Rust 版本要求。
较早的 Rust 版本可能兼容,但随着次要或修补程序版本的更新可能会发生变化。

受功能和修补程序影响的具体版本可以通过 CHANGELOG.md 中的相应标题确定。

依赖关系

~1–1.5MB
~32K SLoC