rorm-db 0.7.0

The inner database abstraction layer from rorm.
Documentation
use std::future::Ready;

use futures::future::BoxFuture;
use futures::stream::Empty;
use rorm_sql::value::Value;
use rorm_sql::DBImpl;

use super::no_sqlx;
use crate::database::Database;
use crate::error::Error;
use crate::executor::{
    AffectedRows, All, Executor, Nothing, One, Optional, QueryStrategy, QueryStrategyResult, Stream,
};
use crate::row::Row;
use crate::transaction::Transaction;

impl<'executor> Executor<'executor> for &'executor Database {
    fn execute<'data, 'result, Q>(
        self,
        _query: String,
        _values: Vec<Value<'data>>,
    ) -> Q::Result<'result>
    where
        'executor: 'result,
        'data: 'result,
        Q: QueryStrategy,
    {
        no_sqlx();
    }

    fn dialect(&self) -> DBImpl {
        self.db_impl
    }

    type EnsureTransactionFuture = Ready<Result<TransactionGuard<'executor>, Error>>;

    fn ensure_transaction(
        self,
    ) -> BoxFuture<'executor, Result<TransactionGuard<'executor>, Error>> {
        no_sqlx();
    }
}
impl<'executor> Executor<'executor> for &'executor mut Transaction<'_> {
    fn execute<'data, 'result, Q>(
        self,
        _query: String,
        _values: Vec<Value<'data>>,
    ) -> Q::Result<'result>
    where
        'executor: 'result,
        'data: 'result,
        Q: QueryStrategy,
    {
        no_sqlx();
    }

    fn dialect(&self) -> DBImpl {
        self.db_impl
    }

    type EnsureTransactionFuture = Ready<Result<TransactionGuard<'executor>, Error>>;

    fn ensure_transaction(
        self,
    ) -> BoxFuture<'executor, Result<TransactionGuard<'executor>, Error>> {
        no_sqlx();
    }
}

pub trait QueryStrategyImpl: QueryStrategyResult {}
impl<Q: QueryStrategyResult> QueryStrategyImpl for Q {}

impl QueryStrategyResult for Nothing {
    type Result<'result> = Ready<Result<(), Error>>;
}

impl QueryStrategyResult for AffectedRows {
    type Result<'result> = Ready<Result<u64, Error>>;
}

impl QueryStrategyResult for One {
    type Result<'result> = Ready<Result<Row, Error>>;
}

impl QueryStrategyResult for Optional {
    type Result<'result> = Ready<Result<Option<Row>, Error>>;
}

impl QueryStrategyResult for All {
    type Result<'result> = Ready<Result<Vec<Row>, Error>>;
}

impl QueryStrategyResult for Stream {
    type Result<'result> = Empty<Result<Row, Error>>;
}