mirror of
https://github.com/teloxide/teloxide.git
synced 2025-01-20 15:54:53 +01:00
Switch from rusqlite to sqlx with sqlite feature enabled
This commit is contained in:
parent
d0ab14d593
commit
c09eca1e39
2 changed files with 15 additions and 8 deletions
|
@ -24,7 +24,7 @@ authors = [
|
||||||
maintenance = { status = "actively-developed" }
|
maintenance = { status = "actively-developed" }
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
sqlite-storage = ["rusqlite"]
|
sqlite-storage = ["sqlx"]
|
||||||
redis-storage = ["redis"]
|
redis-storage = ["redis"]
|
||||||
cbor-serializer = ["serde_cbor"]
|
cbor-serializer = ["serde_cbor"]
|
||||||
bincode-serializer = ["bincode"]
|
bincode-serializer = ["bincode"]
|
||||||
|
@ -51,7 +51,11 @@ futures = "0.3.5"
|
||||||
pin-project = "0.4.22"
|
pin-project = "0.4.22"
|
||||||
serde_with_macros = "1.1.0"
|
serde_with_macros = "1.1.0"
|
||||||
|
|
||||||
rusqlite = { version = "0.23", optional = true }
|
sqlx = { version = "0.4.0-beta.1", optional = true, default-features = false, features = [
|
||||||
|
"runtime-tokio",
|
||||||
|
"macros",
|
||||||
|
"sqlite"
|
||||||
|
] }
|
||||||
redis = { version = "0.16.0", optional = true }
|
redis = { version = "0.16.0", optional = true }
|
||||||
serde_cbor = { version = "0.11.1", optional = true }
|
serde_cbor = { version = "0.11.1", optional = true }
|
||||||
bincode = { version = "1.3.1", optional = true }
|
bincode = { version = "1.3.1", optional = true }
|
||||||
|
|
|
@ -4,10 +4,13 @@ use std::{
|
||||||
fmt::{Debug, Display},
|
fmt::{Debug, Display},
|
||||||
sync::Arc,
|
sync::Arc,
|
||||||
};
|
};
|
||||||
use rusqlite::{params, Connection, Error, Result};
|
use sqlx::{SqliteConnection, Connection, sqlite::SqliteError};
|
||||||
use serde::{de::DeserializeOwned, Serialize};
|
use serde::{de::DeserializeOwned, Serialize};
|
||||||
use thiserror::Error;
|
use thiserror::Error;
|
||||||
use tokio::sync::Mutex;
|
use tokio::{
|
||||||
|
sync::Mutex,
|
||||||
|
task::block_in_place,
|
||||||
|
};
|
||||||
|
|
||||||
pub enum SqliteStorageLocation {
|
pub enum SqliteStorageLocation {
|
||||||
InMemory,
|
InMemory,
|
||||||
|
@ -23,11 +26,11 @@ where
|
||||||
#[error("parsing/serializing error: {0}")]
|
#[error("parsing/serializing error: {0}")]
|
||||||
SerdeError(SE),
|
SerdeError(SE),
|
||||||
#[error("error from Sqlite: {0}")]
|
#[error("error from Sqlite: {0}")]
|
||||||
SqliteError(#[from] Error),
|
SqliteError(#[from] SqliteError),
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct SqliteStorage<S> {
|
pub struct SqliteStorage<S> {
|
||||||
conn: Mutex<Connection>,
|
conn: Mutex<SqliteConnection>,
|
||||||
serializer: S,
|
serializer: S,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -35,13 +38,13 @@ impl <S> SqliteStorage<S> {
|
||||||
pub async fn open(
|
pub async fn open(
|
||||||
path: SqliteStorageLocation,
|
path: SqliteStorageLocation,
|
||||||
serializer: S,
|
serializer: S,
|
||||||
) -> Result<Arc<Self>, SqliteStorageError<Infallible>>{
|
) -> Result<Arc<Self>, Box<dyn std::error::Error>>{
|
||||||
let url = match path {
|
let url = match path {
|
||||||
SqliteStorageLocation::InMemory => String::from("sqlite::memory:"),
|
SqliteStorageLocation::InMemory => String::from("sqlite::memory:"),
|
||||||
SqliteStorageLocation::Path(p) => p,
|
SqliteStorageLocation::Path(p) => p,
|
||||||
};
|
};
|
||||||
Ok(Arc::new(Self {
|
Ok(Arc::new(Self {
|
||||||
conn: Mutex::new(Connection::open(&url[..])?),
|
conn: Mutex::new(SqliteConnection::connect(&url[..]).await?),
|
||||||
serializer,
|
serializer,
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue