3 个版本
0.0.3 | 2021 年 6 月 2 日 |
---|---|
0.0.2 | 2021 年 5 月 30 日 |
0.0.1 | 2021 年 5 月 28 日 |
在 #stream 中排名第 651
61KB
1.5K SLoC
percolate
又一个异步实用库。
注意:在这些 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 版 (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
贡献
除非你明确说明,否则根据 Apache-2.0 许可证定义,你提交的任何有意包含在作品中的贡献都将按照上述方式双许可,不附加任何额外条款或条件。
行为准则
变更日志
版本控制
percolate
严格遵循 语义版本控制 2.0.0,但有以下例外
- 在主要版本变更时,次要版本不会重置为 0(除非是 v1)。
它被视为全局功能级别。 - 在主要或次要版本变更时,修补程序版本不会重置为 0(除非是 v0.1 和 v1)。
它被视为全局修补程序级别。
这包括上述 Rust 版本要求。
较早的 Rust 版本可能兼容,但随着次要或修补程序版本的更新可能会发生变化。
受功能和修补程序影响的具体版本可以通过 CHANGELOG.md 中的相应标题确定。
依赖关系
~1–1.5MB
~32K SLoC