1 #![feature(type_alias_impl_trait)]
4 // unset-rustc-env:RUST_BACKTRACE
5 // compile-flags:-Z treat-err-as-bug=1
6 // error-pattern:stack backtrace:
8 // normalize-stderr-test "note: .*" -> ""
9 // normalize-stderr-test "thread 'rustc' .*" -> ""
10 // normalize-stderr-test " +[0-9]+:.*\n" -> ""
11 // normalize-stderr-test " +at .*\n" -> ""
13 use std::future::Future;
21 struct TestTransaction<'conn> {
22 conn: &'conn Connection
25 impl<'conn> Transaction for TestTransaction<'conn> {
31 type TransactionResult<O> = Result<O, ()>;
33 type TransactionFuture<'__, O> = impl '__ + Future<Output = TransactionResult<O>>;
35 fn execute_transaction_fut<'f, F, O>(
37 ) -> impl FnOnce(&mut dyn Transaction) -> TransactionFuture<'_, O>
39 F: FnOnce(&mut dyn Transaction) -> TransactionFuture<'_, O> + 'f
45 async fn do_transaction<O>(
46 &self, f: impl FnOnce(&mut dyn Transaction) -> TransactionFuture<'_, O>
47 ) -> TransactionResult<O>
49 let mut conn = Connection {};
50 let mut transaction = TestTransaction { conn: &mut conn };
51 f(&mut transaction).await