Skip to content

Usage with multithread tokio runtime (axum). (dyn Permission + 'static) cannot be shared between threads safely. #186

Open
@pongsakornsemsuwan

Description

@pongsakornsemsuwan

Hi,
Newbie here so apologize in advance if this is a stupid question 😅
I'm trying to use the SDK, specifically the grant_token, with axum on multithread runtime environment.
I run into the problem calling following example.

pubnub
    .grant_token(usize)
    .resources(Option<[Box<permissions::Permission>]>)
    .patterns(Option<[Box<permissions::Permission>]>)
    .authorized_user_id(Option<String>)
    .meta(Option<HashMap<String, MetaValue>>)
    .execute()

The error I get is

error[E0277]: (dyn Permission + 'static) cannot be shared between threads safely
--> src/routes/player_route.rs:88:1
|
88 | #[debug_handler]
| ^^^^^^^^^^^^^^^^ (dyn Permission + 'static) cannot be shared between threads safely
|
= help: the trait Sync is not implemented for (dyn Permission + 'static)
= note: required for std::ptr::Unique<(dyn Permission + 'static)> to implement Sync
note: required because it appears within the type Box<(dyn Permission + 'static)>

Per my understanding, the cause is that .resources takes trait object Option<[Box<dyn Permission + 'static>] as a parameter whereas axum require Send for trait paremeter (tokio-rs/axum#2522) to ensure thread safety.

Anyone has successfully run the SDK on axum please enlighten me.

Thank you! 🙏

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions