mirror of https://github.com/rust-lang/rust.git
38 lines
893 B
Rust
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() {}
|