Given the following code: playground
use async_trait::async_trait; // 0.1.50
use serde::Serialize;
#[async_trait]
trait Foo {
async fn bar(x: &(impl Serialize + Send));
}
#[async_trait]
impl Foo for () {
async fn bar(x: &(impl Serialize + Send)) {
}
}
fn main() { }
The current output is:
error: future cannot be sent between threads safely
--> src/main.rs:11:47
|
11 | async fn bar(x: &(impl Serialize + Send)) {
| _______________________________________________^
12 | | }
| |_____^ future created by async block is not `Send`
|
note: captured value is not `Send`
--> src/main.rs:11:18
|
11 | async fn bar(x: &(impl Serialize + Send)) {
| ^ has type `&impl Serialize + Send` which is not `Send`
= note: required for the cast to the object type `dyn Future<Output = ()> + Send`
help: consider further restricting this bound
|
11 | async fn bar(x: &(impl Serialize + Send + std::marker::Sync)) {
| ^^^^^^^^^^^^^^^^^^^
The compiler helpfully points out that Sync is required, but nonetheless @chazkiker2 and I both got confused by this error for some time before we noticed it. The suggestion was kind of buried by all the other details.
Given the following code: playground
The current output is:
The compiler helpfully points out that
Syncis required, but nonetheless @chazkiker2 and I both got confused by this error for some time before we noticed it. The suggestion was kind of buried by all the other details.