Struct gotham_middleware_diesel::Repo
source · [−]pub struct Repo<T>where
T: R2D2Connection + 'static,{ /* private fields */ }
Expand description
A database “repository”, for running database workloads. Manages a connection pool and running blocking tasks using tokio::task::spawn_blocking which does not block the tokio event loop.
#[derive(Queryable, Debug)]
pub struct User {
pub id: i32,
pub name: String,
}
type Repo = gotham_middleware_diesel::Repo<SqliteConnection>;
let repo = Repo::new(database_url);
let result = runtime
.block_on(repo.run(|mut conn| {
use schema::users::dsl::*;
users.load::<User>(&mut conn)
}))
.unwrap();
Implementations
sourceimpl<T> Repo<T>where
T: R2D2Connection + 'static,
impl<T> Repo<T>where
T: R2D2Connection + 'static,
sourcepub fn new(database_url: &str) -> Self
pub fn new(database_url: &str) -> Self
Creates a repo with default connection pool settings.
The default connection pool is r2d2::Builder::default()
type Repo = gotham_middleware_diesel::Repo<SqliteConnection>;
// Accepts a database URL, e.g. "postgres://username:password@host/database"
// for a postgres connection. Here we use an Sqlite in memory connection.
let repo = Repo::new(":memory:");
sourcepub fn from_pool_builder(
database_url: &str,
builder: Builder<ConnectionManager<T>>
) -> Self
pub fn from_pool_builder(
database_url: &str,
builder: Builder<ConnectionManager<T>>
) -> Self
Creates a repo with a pool builder, allowing you to customize any connection pool configuration.
use core::time::Duration;
use diesel::r2d2::Pool;
type Repo = gotham_middleware_diesel::Repo<SqliteConnection>;
let database_url = ":memory:";
let repo = Repo::from_pool_builder(
database_url,
Pool::builder()
.connection_timeout(Duration::from_secs(120))
.max_size(100),
);
sourcepub fn with_test_transactions(database_url: &str) -> Self
pub fn with_test_transactions(database_url: &str) -> Self
Creates a repo for use in tests, where queries are executed with an isolated test transaction and rolled back when the connection is dropped. This allows tests to run in parallel without impacting each other.
type Repo = gotham_middleware_diesel::Repo<SqliteConnection>;
let repo = Repo::with_test_transactions(":memory:");
sourcepub async fn run<F, R, E>(&self, f: F) -> Result<R, E>where
F: FnOnce(PooledConnection<ConnectionManager<T>>) -> Result<R, E> + Send + Unpin + 'static,
T: Send + 'static,
R: Send + 'static,
E: Send + 'static,
pub async fn run<F, R, E>(&self, f: F) -> Result<R, E>where
F: FnOnce(PooledConnection<ConnectionManager<T>>) -> Result<R, E> + Send + Unpin + 'static,
T: Send + 'static,
R: Send + 'static,
E: Send + 'static,
Runs the given closure in a way that is safe for blocking IO to the
database without blocking the tokio reactor.
The closure will be passed a Connection
from the pool to use.
Trait Implementations
sourceimpl<T> Clone for Repo<T>where
T: R2D2Connection + 'static,
impl<T> Clone for Repo<T>where
T: R2D2Connection + 'static,
impl<T> StateData for Repo<T>where
T: R2D2Connection + 'static,
Auto Trait Implementations
impl<T> !RefUnwindSafe for Repo<T>
impl<T> Send for Repo<T>
impl<T> Sync for Repo<T>
impl<T> Unpin for Repo<T>
impl<T> !UnwindSafe for Repo<T>
Blanket Implementations
sourceimpl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
sourceimpl<T> FromState for Twhere
T: StateData,
impl<T> FromState for Twhere
T: StateData,
sourcefn try_borrow_from(state: &State) -> Option<&T>
fn try_borrow_from(state: &State) -> Option<&T>
State
storage. Read moresourcefn borrow_from(state: &State) -> &T
fn borrow_from(state: &State) -> &T
State
storage. Read moresourcefn try_borrow_mut_from(state: &mut State) -> Option<&mut T>
fn try_borrow_mut_from(state: &mut State) -> Option<&mut T>
State
storage. Read moresourcefn borrow_mut_from(state: &mut State) -> &mut T
fn borrow_mut_from(state: &mut State) -> &mut T
State
storage. Read moresourcefn try_take_from(state: &mut State) -> Option<T>
fn try_take_from(state: &mut State) -> Option<T>
State
storage and return ownership. Read moresourceimpl<T> Instrument for T
impl<T> Instrument for T
sourcefn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
sourcefn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
sourceimpl<T> IntoSql for T
impl<T> IntoSql for T
sourcefn into_sql<T>(self) -> Self::Expressionwhere
Self: AsExpression<T> + Sized,
T: SqlType + TypedExpressionType,
fn into_sql<T>(self) -> Self::Expressionwhere
Self: AsExpression<T> + Sized,
T: SqlType + TypedExpressionType,
self
to an expression for Diesel’s query builder. Read moresourcefn as_sql<'a, T>(&'a self) -> <&'a Self as AsExpression<T>>::Expressionwhere
&'a Self: AsExpression<T>,
T: SqlType + TypedExpressionType,
fn as_sql<'a, T>(&'a self) -> <&'a Self as AsExpression<T>>::Expressionwhere
&'a Self: AsExpression<T>,
T: SqlType + TypedExpressionType,
&self
to an expression for Diesel’s query builder. Read more