tower_sessions_sqlx_store_chrono/
lib.rs

1pub use sqlx;
2use tower_sessions_core::session_store;
3
4#[cfg(feature = "mysql")]
5#[cfg_attr(docsrs, doc(cfg(feature = "mysql")))]
6pub use self::mysql_store::MySqlStore;
7#[cfg(feature = "postgres")]
8#[cfg_attr(docsrs, doc(cfg(feature = "postgres")))]
9pub use self::postgres_store::PostgresStore;
10#[cfg(feature = "sqlite")]
11#[cfg_attr(docsrs, doc(cfg(feature = "sqlite")))]
12pub use self::sqlite_store::SqliteStore;
13
14#[cfg(feature = "sqlite")]
15#[cfg_attr(docsrs, doc(cfg(feature = "sqlite")))]
16mod sqlite_store;
17
18#[cfg(feature = "postgres")]
19#[cfg_attr(docsrs, doc(cfg(feature = "postgres")))]
20mod postgres_store;
21
22#[cfg(feature = "mysql")]
23#[cfg_attr(docsrs, doc(cfg(feature = "mysql")))]
24mod mysql_store;
25
26/// An error type for SQLx stores.
27#[derive(thiserror::Error, Debug)]
28pub enum SqlxStoreError {
29    /// A variant to map `sqlx` errors.
30    #[error(transparent)]
31    Sqlx(#[from] sqlx::Error),
32
33    /// A variant to map `rmp_serde` encode errors.
34    #[error(transparent)]
35    Encode(#[from] rmp_serde::encode::Error),
36
37    /// A variant to map `rmp_serde` decode errors.
38    #[error(transparent)]
39    Decode(#[from] rmp_serde::decode::Error),
40}
41
42impl From<SqlxStoreError> for session_store::Error {
43    fn from(err: SqlxStoreError) -> Self {
44        match err {
45            SqlxStoreError::Sqlx(inner) => session_store::Error::Backend(inner.to_string()),
46            SqlxStoreError::Decode(inner) => session_store::Error::Decode(inner.to_string()),
47            SqlxStoreError::Encode(inner) => session_store::Error::Encode(inner.to_string()),
48        }
49    }
50}
51
52pub fn current_time() -> chrono::DateTime<chrono::Utc> {
53    chrono::Utc::now()
54}
55
56pub fn convert_expiry_datetime(expiry_date: time::OffsetDateTime) -> chrono::DateTime<chrono::Utc> {
57    // if we can't convert the expiry date to a chrono type, return the current time i.e. effectively assume our session has expired
58    chrono::DateTime::from_timestamp(expiry_date.unix_timestamp(), expiry_date.nanosecond())
59        .unwrap_or(chrono::Utc::now())
60}