rust/tests/ui/dropck/dropck-only-error-async.rs

38 lines
893 B
Rust

// Test that we don't ICE for a typeck error that only shows up in dropck
// issue #135039
//@ edition:2018
pub trait AuthUser {
type Id;
}
pub trait AuthnBackend {
type User: AuthUser;
}
pub struct AuthSession<Backend: AuthnBackend> {
user: Option<Backend::User>,
data: Option<<<Backend as AuthnBackend>::User as AuthUser>::Id>,
}
pub trait Authz: Sized {
type AuthnBackend: AuthnBackend<User = Self>;
}
pub trait Query<User: Authz> {
type Output;
async fn run(&self) -> Result<Self::Output, ()>;
}
pub async fn run_query<User: Authz, Q: Query<User> + 'static>(
auth: AuthSession<User::AuthnBackend>,
//~^ ERROR the trait bound `User: AuthUser` is not satisfied [E0277]
//~| ERROR the trait bound `User: AuthUser` is not satisfied [E0277]
query: Q,
) -> Result<Q::Output, ()> {
let user = auth.user;
query.run().await
}
fn main() {}