Skip to content

Instantly share code, notes, and snippets.

@Geobert
Created July 27, 2020 13:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Geobert/ac445ed7d2363ec2dcda86f3b2d96bdc to your computer and use it in GitHub Desktop.
Save Geobert/ac445ed7d2363ec2dcda86f3b2d96bdc to your computer and use it in GitHub Desktop.
Async error
error[E0277]: `dyn oxide_auth_async::code_grant::authorization::Endpoint + std::marker::Send` cannot be shared between threads safely
--> src\server.rs:115:68
|
115 | let get_authorize = warp::path("authorize").and(warp::query()).and_then(
| ^^^^^^^^ `dyn oxide_auth_async::code_grant::authorization::Endpoint + std::marker::Send` cannot be shared between threads safely
|
= help: the trait `std::marker::Sync` is not implemented for `dyn oxide_auth_async::code_grant::authorization::Endpoint + std::marker::Send`
= note: required because of the requirements on the impl of `std::marker::Send` for `&dyn oxide_auth_async::code_grant::authorization::Endpoint + std::marker::Send`
= note: required because it appears within the type `for<'r, 's, 't0, 't1, 't2, 't3, 't4, 't5, 't6, 't7, 't8, 't9, 't10, 't11, 't12, 't13> {std::future::ResumeTy, &'r mut (dyn oxide_auth_async::code_grant::authorization::Endpoint + std::marker::Send + 's), &'t0 (dyn oxide_auth::code_grant::authorization::Request + std::marker::Sync + 't1), oxide_auth::code_grant::authorization::Authorization, oxide_auth_async::code_grant::authorization::authorization_code::{{closure}}#0::Requested, std::option::Option<url::Url>, std::string::String, oxide_auth::primitives::registrar::ClientUrl<'t2>, &'t3 (dyn oxide_auth_async::code_grant::authorization::Endpoint + std::marker::Send
+ 't4), &'t5 (dyn oxide_auth_async::primitives::Registrar + 't6), std::pin::Pin<std::boxed::Box<(dyn core::future::future::Future<Output = std::result::Result<oxide_auth::primitives::registrar::BoundClient<'t7>, oxide_auth::primitives::registrar::RegistrarError>> + std::marker::Send + 't8)>>, (), &'t9 mut (dyn oxide_auth_async::code_grant::authorization::Extension + 't10), std::pin::Pin<std::boxed::Box<(dyn core::future::future::Future<Output = std::result::Result<oxide_auth::primitives::grant::Extensions, ()>> + std::marker::Send + 't11)>>, url::Url, std::option::Option<oxide_auth::primitives::scope::Scope>, oxide_auth::primitives::registrar::BoundClient<'t12>, std::pin::Pin<std::boxed::Box<(dyn core::future::future::Future<Output = std::result::Result<oxide_auth::primitives::registrar::PreGrant, oxide_auth::primitives::registrar::RegistrarError>> + std::marker::Send + 't13)>>}`
= note: required because it appears within the type `[static generator@oxide_auth_async::code_grant::authorization::authorization_code::{{closure}}#0 0:&mut dyn oxide_auth_async::code_grant::authorization::Endpoint + std::marker::Send, 1:&dyn oxide_auth::code_grant::authorization::Request + std::marker::Sync for<'r, 's, 't0, 't1, 't2, 't3, 't4, 't5, 't6, 't7, 't8, 't9, 't10, 't11, 't12, 't13> {std::future::ResumeTy, &'r mut (dyn oxide_auth_async::code_grant::authorization::Endpoint + std::marker::Send + 's), &'t0 (dyn oxide_auth::code_grant::authorization::Request + std::marker::Sync + 't1), oxide_auth::code_grant::authorization::Authorization, oxide_auth_async::code_grant::authorization::authorization_code::{{closure}}#0::Requested, std::option::Option<url::Url>, std::string::String, oxide_auth::primitives::registrar::ClientUrl<'t2>, &'t3 (dyn oxide_auth_async::code_grant::authorization::Endpoint + std::marker::Send + 't4), &'t5 (dyn oxide_auth_async::primitives::Registrar + 't6), std::pin::Pin<std::boxed::Box<(dyn core::future::future::Future<Output = std::result::Result<oxide_auth::primitives::registrar::BoundClient<'t7>, oxide_auth::primitives::registrar::RegistrarError>> + std::marker::Send + 't8)>>, (), &'t9 mut (dyn oxide_auth_async::code_grant::authorization::Extension + 't10), std::pin::Pin<std::boxed::Box<(dyn core::future::future::Future<Output = std::result::Result<oxide_auth::primitives::grant::Extensions, ()>> + std::marker::Send + 't11)>>, url::Url, std::option::Option<oxide_auth::primitives::scope::Scope>, oxide_auth::primitives::registrar::BoundClient<'t12>, std::pin::Pin<std::boxed::Box<(dyn core::future::future::Future<Output = std::result::Result<oxide_auth::primitives::registrar::PreGrant, oxide_auth::primitives::registrar::RegistrarError>> + std::marker::Send + 't13)>>}]`
= note: required because it appears within the type `std::future::from_generator::GenFuture<[static generator@oxide_auth_async::code_grant::authorization::authorization_code::{{closure}}#0 0:&mut dyn oxide_auth_async::code_grant::authorization::Endpoint + std::marker::Send, 1:&dyn oxide_auth::code_grant::authorization::Request + std::marker::Sync for<'r, 's, 't0, 't1, 't2, 't3, 't4, 't5, 't6, 't7, 't8, 't9, 't10, 't11, 't12, 't13> {std::future::ResumeTy, &'r mut (dyn oxide_auth_async::code_grant::authorization::Endpoint + std::marker::Send + 's), &'t0 (dyn oxide_auth::code_grant::authorization::Request + std::marker::Sync + 't1), oxide_auth::code_grant::authorization::Authorization, oxide_auth_async::code_grant::authorization::authorization_code::{{closure}}#0::Requested, std::option::Option<url::Url>, std::string::String, oxide_auth::primitives::registrar::ClientUrl<'t2>, &'t3 (dyn oxide_auth_async::code_grant::authorization::Endpoint + std::marker::Send + 't4), &'t5 (dyn oxide_auth_async::primitives::Registrar + 't6), std::pin::Pin<std::boxed::Box<(dyn core::future::future::Future<Output = std::result::Result<oxide_auth::primitives::registrar::BoundClient<'t7>, oxide_auth::primitives::registrar::RegistrarError>> + std::marker::Send + 't8)>>, (), &'t9 mut (dyn oxide_auth_async::code_grant::authorization::Extension + 't10), std::pin::Pin<std::boxed::Box<(dyn core::future::future::Future<Output = std::result::Result<oxide_auth::primitives::grant::Extensions, ()>> + std::marker::Send + 't11)>>, url::Url, std::option::Option<oxide_auth::primitives::scope::Scope>, oxide_auth::primitives::registrar::BoundClient<'t12>, std::pin::Pin<std::boxed::Box<(dyn core::future::future::Future<Output = std::result::Result<oxide_auth::primitives::registrar::PreGrant, oxide_auth::primitives::registrar::RegistrarError>> + std::marker::Send + 't13)>>}]>`
= note: required because it appears within the type `impl core::future::future::Future`
= note: required because it appears within the type `impl core::future::future::Future`
= note: required because it appears within the type `for<'r, 's, 't0, 't1, 't2, 't3, 't4, 't5, 't6, 't7, 't8, 't9, 't10, 't11> {std::future::ResumeTy, &'r mut oxide_auth_async::endpoint::authorization::AuthorizationFlow<oauth::endpoint::EndpointImpl<'_>, oxide_auth::frontends::simple::request::Request>, oxide_auth::frontends::simple::request::Request, oxide_auth_async::endpoint::authorization::AuthorizationFlow<oauth::endpoint::EndpointImpl<'_>, oxide_auth::frontends::simple::request::Request>, oxide_auth_async::endpoint::authorization::WrappedAuthorization<oauth::endpoint::EndpointImpl<'_>, oxide_auth::frontends::simple::request::Request>, &'s mut (dyn oxide_auth_async::code_grant::authorization::Endpoint + std::marker::Send + 't0), &'t1 mut oxide_auth_async::endpoint::authorization::WrappedAuthorization<oauth::endpoint::EndpointImpl<'_>, oxide_auth::frontends::simple::request::Request>, &'t2 mut oxide_auth::frontends::simple::request::Request, oxide_auth_async::endpoint::authorization::WrappedRequest<oxide_auth::frontends::simple::request::Request>, &'t3 (dyn oxide_auth::code_grant::authorization::Request + std::marker::Sync + 't4), &'t5 oxide_auth_async::endpoint::authorization::WrappedRequest<oxide_auth::frontends::simple::request::Request>, impl core::future::future::Future, (), std::result::Result<oxide_auth_async::code_grant::authorization::Pending, oxide_auth::code_grant::authorization::Error>, oxide_auth_async::endpoint::authorization::AuthorizationPartialInner<'t8, oauth::endpoint::EndpointImpl<'_>, oxide_auth::frontends::simple::request::Request>, oxide_auth_async::endpoint::authorization::AuthorizationPartial<'t9, oauth::endpoint::EndpointImpl<'_>, oxide_auth::frontends::simple::request::Request>, impl core::future::future::Future}`
= note: required because it appears within the type `[static generator@oxide_auth_async::endpoint::authorization::AuthorizationFlow::<E, R>::execute::{{closure}}#0 0:&mut oxide_auth_async::endpoint::authorization::AuthorizationFlow<oauth::endpoint::EndpointImpl<'_>, oxide_auth::frontends::simple::request::Request>, 1:oxide_auth::frontends::simple::request::Request for<'r, 's, 't0, 't1, 't2, 't3, 't4, 't5, 't6, 't7, 't8, 't9, 't10, 't11> {std::future::ResumeTy, &'r mut oxide_auth_async::endpoint::authorization::AuthorizationFlow<oauth::endpoint::EndpointImpl<'_>, oxide_auth::frontends::simple::request::Request>, oxide_auth::frontends::simple::request::Request, oxide_auth_async::endpoint::authorization::AuthorizationFlow<oauth::endpoint::EndpointImpl<'_>, oxide_auth::frontends::simple::request::Request>, oxide_auth_async::endpoint::authorization::WrappedAuthorization<oauth::endpoint::EndpointImpl<'_>, oxide_auth::frontends::simple::request::Request>, &'s mut (dyn oxide_auth_async::code_grant::authorization::Endpoint + std::marker::Send + 't0), &'t1 mut oxide_auth_async::endpoint::authorization::WrappedAuthorization<oauth::endpoint::EndpointImpl<'_>, oxide_auth::frontends::simple::request::Request>, &'t2 mut oxide_auth::frontends::simple::request::Request, oxide_auth_async::endpoint::authorization::WrappedRequest<oxide_auth::frontends::simple::request::Request>, &'t3 (dyn oxide_auth::code_grant::authorization::Request + std::marker::Sync + 't4), &'t5 oxide_auth_async::endpoint::authorization::WrappedRequest<oxide_auth::frontends::simple::request::Request>, impl core::future::future::Future, (), std::result::Result<oxide_auth_async::code_grant::authorization::Pending, oxide_auth::code_grant::authorization::Error>, oxide_auth_async::endpoint::authorization::AuthorizationPartialInner<'t8, oauth::endpoint::EndpointImpl<'_>, oxide_auth::frontends::simple::request::Request>, oxide_auth_async::endpoint::authorization::AuthorizationPartial<'t9, oauth::endpoint::EndpointImpl<'_>, oxide_auth::frontends::simple::request::Request>, impl core::future::future::Future}]`
= note: required because it appears within the type `std::future::from_generator::GenFuture<[static generator@oxide_auth_async::endpoint::authorization::AuthorizationFlow::<E, R>::execute::{{closure}}#0 0:&mut oxide_auth_async::endpoint::authorization::AuthorizationFlow<oauth::endpoint::EndpointImpl<'_>, oxide_auth::frontends::simple::request::Request>, 1:oxide_auth::frontends::simple::request::Request for<'r, 's, 't0, 't1, 't2, 't3, 't4, 't5,
't6, 't7, 't8, 't9, 't10, 't11> {std::future::ResumeTy, &'r mut oxide_auth_async::endpoint::authorization::AuthorizationFlow<oauth::endpoint::EndpointImpl<'_>, oxide_auth::frontends::simple::request::Request>, oxide_auth::frontends::simple::request::Request, oxide_auth_async::endpoint::authorization::AuthorizationFlow<oauth::endpoint::EndpointImpl<'_>, oxide_auth::frontends::simple::request::Request>, oxide_auth_async::endpoint::authorization::WrappedAuthorization<oauth::endpoint::EndpointImpl<'_>, oxide_auth::frontends::simple::request::Request>, &'s mut (dyn oxide_auth_async::code_grant::authorization::Endpoint + std::marker::Send + 't0), &'t1 mut oxide_auth_async::endpoint::authorization::WrappedAuthorization<oauth::endpoint::EndpointImpl<'_>, oxide_auth::frontends::simple::request::Request>, &'t2 mut oxide_auth::frontends::simple::request::Request, oxide_auth_async::endpoint::authorization::WrappedRequest<oxide_auth::frontends::simple::request::Request>, &'t3 (dyn oxide_auth::code_grant::authorization::Request + std::marker::Sync + 't4), &'t5 oxide_auth_async::endpoint::authorization::WrappedRequest<oxide_auth::frontends::simple::request::Request>, impl core::future::future::Future, (), std::result::Result<oxide_auth_async::code_grant::authorization::Pending, oxide_auth::code_grant::authorization::Error>, oxide_auth_async::endpoint::authorization::AuthorizationPartialInner<'t8, oauth::endpoint::EndpointImpl<'_>, oxide_auth::frontends::simple::request::Request>, oxide_auth_async::endpoint::authorization::AuthorizationPartial<'t9, oauth::endpoint::EndpointImpl<'_>, oxide_auth::frontends::simple::request::Request>, impl core::future::future::Future}]>`
= note: required because it appears within the type `impl core::future::future::Future`
= note: required because it appears within the type `impl core::future::future::Future`
= note: required because it appears within the type `for<'r, 's, 't0, 't1, 't2, 't3, 't4, 't5, 't6, 't7, 't8, 't9, 't10, 't11, 't12, 't13, 't14, 't15, 't16, 't17> {std::future::ResumeTy, &'r config::Config, std::sync::Arc<oauth::endpoint::EndpointState>, std::collections::HashMap<std::string::String, std::string::String>, std::option::Option<std::string::String>, oxide_auth::frontends::simple::request::Request, &'s std::collections::HashMap<std::string::String, std::string::String>, &'t0 str, std::option::Option<&'t1 std::string::String>, &'t2 std::string::String, oauth::endpoint::EndpointState, &'t3 tokio::sync::mutex::Mutex<std::collections::HashMap<std::string::String, std::string::String>>, tokio::sync::mutex::Mutex<std::collections::HashMap<std::string::String, std::string::String>>, impl core::future::future::Future, (), &'t6 oauth::endpoint::EndpointState, impl core::future::future::Future, oauth::endpoint::EndpointImpl<'t11>, api::authorize::LoginPageSolicitor, std::boxed::Box<(dyn oxide_auth_async::endpoint::OwnerSolicitor<oxide_auth::frontends::simple::request::Request> + std::marker::Send + 't12)>, std::boxed::Box<api::authorize::LoginPageSolicitor>, &'t13 mut oxide_auth_async::endpoint::authorization::AuthorizationFlow<oauth::endpoint::EndpointImpl<'t14>, oxide_auth::frontends::simple::request::Request>, oxide_auth_async::endpoint::authorization::AuthorizationFlow<oauth::endpoint::EndpointImpl<'t15>, oxide_auth::frontends::simple::request::Request>, impl core::future::future::Future}`
= note: required because it appears within the type `[static generator@src\api\authorize.rs:24:25: 52:2 _cfg:&config::Config, state:std::sync::Arc<oauth::endpoint::EndpointState>, params:std::collections::HashMap<std::string::String, std::string::String>, _session_id:std::option::Option<std::string::String> for<'r, 's, 't0, 't1, 't2, 't3, 't4, 't5, 't6, 't7, 't8, 't9, 't10, 't11, 't12, 't13, 't14, 't15, 't16, 't17> {std::future::ResumeTy, &'r config::Config, std::sync::Arc<oauth::endpoint::EndpointState>, std::collections::HashMap<std::string::String, std::string::String>, std::option::Option<std::string::String>, oxide_auth::frontends::simple::request::Request, &'s std::collections::HashMap<std::string::String, std::string::String>, &'t0 str, std::option::Option<&'t1 std::string::String>, &'t2 std::string::String, oauth::endpoint::EndpointState, &'t3 tokio::sync::mutex::Mutex<std::collections::HashMap<std::string::String, std::string::String>>, tokio::sync::mutex::Mutex<std::collections::HashMap<std::string::String, std::string::String>>, impl core::future::future::Future, (), &'t6 oauth::endpoint::EndpointState, impl core::future::future::Future, oauth::endpoint::EndpointImpl<'t11>, api::authorize::LoginPageSolicitor, std::boxed::Box<(dyn oxide_auth_async::endpoint::OwnerSolicitor<oxide_auth::frontends::simple::request::Request> + std::marker::Send + 't12)>, std::boxed::Box<api::authorize::LoginPageSolicitor>, &'t13 mut oxide_auth_async::endpoint::authorization::AuthorizationFlow<oauth::endpoint::EndpointImpl<'t14>, oxide_auth::frontends::simple::request::Request>, oxide_auth_async::endpoint::authorization::AuthorizationFlow<oauth::endpoint::EndpointImpl<'t15>, oxide_auth::frontends::simple::request::Request>, impl core::future::future::Future}]`
= note: required because it appears within the type `std::future::from_generator::GenFuture<[static generator@src\api\authorize.rs:24:25: 52:2 _cfg:&config::Config, state:std::sync::Arc<oauth::endpoint::EndpointState>, params:std::collections::HashMap<std::string::String, std::string::String>, _session_id:std::option::Option<std::string::String> for<'r, 's, 't0, 't1, 't2, 't3, 't4, 't5, 't6, 't7, 't8, 't9, 't10, 't11, 't12, 't13, 't14, 't15, 't16, 't17> {std::future::ResumeTy, &'r config::Config, std::sync::Arc<oauth::endpoint::EndpointState>, std::collections::HashMap<std::string::String, std::string::String>, std::option::Option<std::string::String>, oxide_auth::frontends::simple::request::Request, &'s std::collections::HashMap<std::string::String, std::string::String>, &'t0 str, std::option::Option<&'t1 std::string::String>, &'t2 std::string::String, oauth::endpoint::EndpointState, &'t3 tokio::sync::mutex::Mutex<std::collections::HashMap<std::string::String, std::string::String>>, tokio::sync::mutex::Mutex<std::collections::HashMap<std::string::String, std::string::String>>, impl core::future::future::Future, (), &'t6 oauth::endpoint::EndpointState, impl core::future::future::Future, oauth::endpoint::EndpointImpl<'t11>, api::authorize::LoginPageSolicitor, std::boxed::Box<(dyn oxide_auth_async::endpoint::OwnerSolicitor<oxide_auth::frontends::simple::request::Request> + std::marker::Send + 't12)>, std::boxed::Box<api::authorize::LoginPageSolicitor>, &'t13 mut oxide_auth_async::endpoint::authorization::AuthorizationFlow<oauth::endpoint::EndpointImpl<'t14>, oxide_auth::frontends::simple::request::Request>, oxide_auth_async::endpoint::authorization::AuthorizationFlow<oauth::endpoint::EndpointImpl<'t15>, oxide_auth::frontends::simple::request::Request>, impl core::future::future::Future}]>`
= note: required because it appears within the type `impl core::future::future::Future`
= note: required because it appears within the type `impl core::future::future::Future`
= note: required because it appears within the type `for<'r, 's, 't0> {std::future::ResumeTy, std::sync::Arc<config::Config>, &'r config::Config, &'s std::sync::Arc<config::Config>, std::sync::Arc<oauth::endpoint::EndpointState>, std::collections::HashMap<std::string::String, std::string::String>, std::option::Option<std::string::String>, impl core::future::future::Future, ()}`
= note: required because it appears within the type `[static generator@src\server.rs:120:24: 125:14 cfg:std::sync::Arc<config::Config>, state:std::sync::Arc<oauth::endpoint::EndpointState>, params:std::collections::HashMap<std::string::String, std::string::String> for<'r, 's, 't0> {std::future::ResumeTy, std::sync::Arc<config::Config>, &'r config::Config, &'s std::sync::Arc<config::Config>, std::sync::Arc<oauth::endpoint::EndpointState>, std::collections::HashMap<std::string::String, std::string::String>, std::option::Option<std::string::String>, impl core::future::future::Future, ()}]`
= note: required because it appears within the type `std::future::from_generator::GenFuture<[static generator@src\server.rs:120:24: 125:14 cfg:std::sync::Arc<config::Config>, state:std::sync::Arc<oauth::endpoint::EndpointState>, params:std::collections::HashMap<std::string::String, std::string::String> for<'r, 's, 't0> {std::future::ResumeTy, std::sync::Arc<config::Config>, &'r config::Config, &'s std::sync::Arc<config::Config>, std::sync::Arc<oauth::endpoint::EndpointState>, std::collections::HashMap<std::string::String, std::string::String>, std::option::Option<std::string::String>, impl core::future::future::Future, ()}]>`
= note: required because it appears within the type `impl core::future::future::Future`
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment