37 lines
976 B
Rust
37 lines
976 B
Rust
#![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;
|
|
}
|