diff --git a/contrib/db_pools/lib/Cargo.toml b/contrib/db_pools/lib/Cargo.toml index 2654139914..3e3e44c726 100644 --- a/contrib/db_pools/lib/Cargo.toml +++ b/contrib/db_pools/lib/Cargo.toml @@ -28,6 +28,7 @@ sqlx_macros = ["sqlx/macros"] # diesel features diesel_postgres = ["diesel-async/postgres", "diesel-async/deadpool", "deadpool", "diesel"] diesel_mysql = ["diesel-async/mysql", "diesel-async/deadpool", "deadpool", "diesel"] +diesel_sqlite = ["diesel-async/sqlite", "diesel-async/deadpool", "deadpool", "diesel"] # implicit features: mongodb [dependencies.rocket] diff --git a/contrib/db_pools/lib/src/diesel.rs b/contrib/db_pools/lib/src/diesel.rs index 9d4d935d9d..2ad39ecba5 100644 --- a/contrib/db_pools/lib/src/diesel.rs +++ b/contrib/db_pools/lib/src/diesel.rs @@ -95,6 +95,10 @@ pub use diesel_async::AsyncMysqlConnection; #[cfg(feature = "diesel_postgres")] pub use diesel_async::AsyncPgConnection; +#[doc(inline)] +#[cfg(feature = "diesel_sqlite")] +pub use diesel_async::sync_connection_wrapper::SyncConnectionWrapper; + /// Alias of a `Result` with an error type of [`Debug`] for a `diesel::Error`. /// /// `QueryResult` is a [`Responder`](rocket::response::Responder) when `T` (the @@ -150,3 +154,25 @@ pub type MysqlPool = Pool; /// ``` #[cfg(feature = "diesel_postgres")] pub type PgPool = Pool; + +/// Type alias for an `async` pool of Sqlite connections for `async` [diesel]. +/// +/// ```rust +/// # extern crate rocket; +/// # #[cfg(feature = "diesel_sqlite")] { +/// # use rocket::get; +/// use rocket_db_pools::{Database, Connection}; +/// use rocket_db_pools::diesel::{SqlitePool, prelude::*}; +/// +/// #[derive(Database)] +/// #[database("my_sqlite_db_name")] +/// struct Db(SqlitePool); +/// +/// #[get("/")] +/// async fn use_db(mut db: Connection) { +/// /* .. */ +/// } +/// # } +/// ``` +#[cfg(feature = "diesel_sqlite")] +pub type SqlitePool = Pool>; diff --git a/contrib/db_pools/lib/src/lib.rs b/contrib/db_pools/lib/src/lib.rs index 0ec23bb470..3eab6cee94 100644 --- a/contrib/db_pools/lib/src/lib.rs +++ b/contrib/db_pools/lib/src/lib.rs @@ -141,10 +141,11 @@ //! //! ## `diesel` (v2) //! -//! | Database | Feature | [`Pool`] Type | [`Connection`] Deref | -//! |----------|-------------------|-----------------------|----------------------------------| -//! | Postgres | `diesel_postgres` | [`diesel::PgPool`] | [`diesel::AsyncPgConnection`] | -//! | MySQL | `diesel_mysql` | [`diesel::MysqlPool`] | [`diesel::AsyncMysqlConnection`] | //! +//! | Database | Feature | [`Pool`] Type | [`Connection`] Deref | +//! |----------|-------------------|------------------------|--------------------------------------------------------------| +//! | Postgres | `diesel_postgres` | [`diesel::PgPool`] | [`diesel::AsyncPgConnection`] | +//! | MySQL | `diesel_mysql` | [`diesel::MysqlPool`] | [`diesel::AsyncMysqlConnection`] | +//! | SQLite | `diesel_sqlite` | [`diesel::SqlitePool`] | [`diesel::SyncConnectionWrapper>`] | //! //! See [`diesel`] for usage details. //! @@ -243,7 +244,11 @@ pub use rocket; #[doc(inline)] pub use rocket::figment; -#[cfg(any(feature = "diesel_postgres", feature = "diesel_mysql"))] pub mod diesel; +#[cfg(any( + feature = "diesel_postgres", + feature = "diesel_mysql", + feature = "diesel_sqlite" +))] pub mod diesel; #[cfg(feature = "deadpool_postgres")] pub use deadpool_postgres; #[cfg(feature = "deadpool_redis")] pub use deadpool_redis; #[cfg(feature = "mongodb")] pub use mongodb; diff --git a/contrib/db_pools/lib/src/pool.rs b/contrib/db_pools/lib/src/pool.rs index 3d54dc485d..248803a686 100644 --- a/contrib/db_pools/lib/src/pool.rs +++ b/contrib/db_pools/lib/src/pool.rs @@ -192,6 +192,15 @@ mod deadpool_postgres { } } + #[cfg(feature = "diesel_sqlite")] + impl DeadManager for AsyncDieselConnectionManager< + diesel_async::sync_connection_wrapper::SyncConnectionWrapper:: + > { + fn new(config: &Config) -> Result { + Ok(Self::new(config.url.as_str())) + } + } + #[rocket::async_trait] impl>> crate::Pool for Pool where M::Type: Send, C: Send + Sync + 'static, M::Error: std::error::Error