#impl-block #async-await #tokio #async-std #generate #blocking #back-end

macro block_on_proc

Generate a blocking method for each async method in an impl block. Supports either tokio or async-std backend.

2 unstable releases

0.2.0 Jan 11, 2021
0.1.0 Nov 15, 2020

#24 in #impl-block

Download history 2256/week @ 2024-01-05 3955/week @ 2024-01-12 3528/week @ 2024-01-19 3856/week @ 2024-01-26 2586/week @ 2024-02-02 3388/week @ 2024-02-09 3600/week @ 2024-02-16 4246/week @ 2024-02-23 4086/week @ 2024-03-01 4867/week @ 2024-03-08 4910/week @ 2024-03-15 3909/week @ 2024-03-22 4013/week @ 2024-03-29 5166/week @ 2024-04-05 5365/week @ 2024-04-12 3348/week @ 2024-04-19

18,571 downloads per month
Used in 6 crates (2 directly)

MIT license

10KB
129 lines

block_on proc macro

Generate a blocking method for each async method in an impl block. Supports either tokio or async-std backend. Generated methods are suffixed with _blocking.

Example tokio

use block_on::block_on;

struct Tokio {}

#[block_on("tokio")]
impl Tokio {
    async fn test_async(&self) {}        
}

Generates the following impl block

async fn test_async(&self) {}
        
fn test_async_blocking(&self) {
    use tokio::runtime::Runtime;
    let mut rt = Runtime::new().unwrap();
    rt.block_on(self.test_async())
}

Example async-std

use block_on::block_on;

struct AsyncStd {}

#[block_on("async-std")]
impl AsyncStd {
    async fn test_async(&self) {}        
}

Generates the following method in the same impl block

async fn test_async(&self) {}        

fn test_async_blocking(&self) {
      use async_std::task;
      task::block_on(self.test_async())
}

Dependencies

~1.5MB
~33K SLoC