| #![crate_name = "foo"] | |
| // reduced from sqlx 0.7.3 | |
| use std::future::Future; | |
| use std::ops::{Deref, DerefMut}; | |
| use std::pin::Pin; | |
| pub enum Error {} | |
| pub trait Acquire<'c> { | |
| type Database: Database; | |
| type Connection: Deref<Target = <Self::Database as Database>::Connection> + DerefMut + Send; | |
| } | |
| pub trait Database { | |
| type Connection: Connection<Database = Self>; | |
| } | |
| pub trait Connection { | |
| type Database: Database; | |
| type Options: ConnectionOptions<Connection = Self>; | |
| fn begin( | |
| &mut self, | |
| ) -> Pin<Box<dyn Future<Output = Result<Transaction<'_, Self::Database>, Error>> + Send + '_>> | |
| where | |
| Self: Sized; | |
| } | |
| pub trait ConnectionOptions { | |
| type Connection: Connection; | |
| } | |
| pub struct Transaction<'c, DB: Database> { | |
| _db: &'c DB, | |
| } | |
| impl<'t, 'c, DB: Database> Acquire<'t> for &'t mut Transaction<'c, DB> | |
| where | |
| <DB as Database>::Connection: Send, | |
| { | |
| type Database = DB; | |
| type Connection = &'t mut <DB as Database>::Connection; | |
| } |