#run-time #async #layer #async-std #aggregation #having #runtime-tokio

aral

异步运行时聚合层

5个版本

0.1.0 2023年12月29日
0.1.0-alpha.52023年10月20日
0.1.0-alpha.22023年5月29日
0.1.0-alpha.12023年5月24日
0.0.0 2023年5月19日

#582 in 异步

Download history 2/week @ 2024-07-04 126/week @ 2024-07-25

每月128次下载

Apache-2.0 OR MIT OR MulanPSL-2.0

42KB
1K SLoC

ARAL - 异步运行时聚合层

github.com crates.io docs.rs

ARAL是应用程序和异步任务执行器之间的聚合层。它允许您在不修改应用程序代码的情况下轻松切换执行器。

运行时

注意:库不应启用任何运行时功能。您可以通过使用cargo功能来选择执行器。只能启用一个运行时。有效的功能包括

  • runtime-tokio
  • runtime-async-std

原理

  1. 不实现异步运行时。

    不实现具体的异步运行时,只聚合现成的异步运行时。

  2. 最小化。

    尽量保持最小化,仅添加必要的功能,不添加额外的工具(如通道)。

  3. 与std保持一致。

    异步API风格应尽可能与std的同步API保持一致。

示例

对于库,将aral作为依赖项使用,并不要启用任何runtime-*功能。

# Cargo.toml

[package]
name = "foo"
version = "0.1.0"
edition = "2021"

[dependencies]
aral = "*"
// lib.rs

use aral::fs::File;
use std::io::Result;

pub async fn is_file(path: &str) -> Result<bool> {
   let file = File::open(path).await?;
   let metadata = file.metadata().await?;
   Ok(metadata.is_file())
}

对于应用程序,将aral作为依赖项使用,并启用一个runtime-*功能。

# Cargo.toml

[package]
name = "app"
version = "0.1.0"
edition = "2021"

[dependencies]
aral = { version = "*", features = ["runtime-tokio"] }
tokio = { version = "1.33.0", features = ["full"] }
foo = "0.1.0"
// main.rs

use foo::is_file;

#[tokio::main]
async fn main() {
   let path = "/tmp/some-file.txt";
   println!("{} is file: {:?}", path, is_file(path).await);
}

现在,您可以通过启用其他runtime-*功能轻松地在异步运行时之间切换。

许可证

Apache-2.0 OR MIT OR MulanPSL-2.0

依赖项

~0–13MB
~110K SLoC