diff options
author | 2025-04-17 17:30:22 +0100 | |
---|---|---|
committer | 2025-04-17 17:30:22 +0100 | |
commit | 61b755c890dcaa66daa35942ca87cc00269b0fe9 (patch) | |
tree | 36190a844cfef474d5e11fe473db462bb4a4d135 /filamento/src/chat.rs | |
parent | 26d0ee51e232b793bc83ba565c0e9ab820d8d0db (diff) | |
download | luz-61b755c890dcaa66daa35942ca87cc00269b0fe9.tar.gz luz-61b755c890dcaa66daa35942ca87cc00269b0fe9.tar.bz2 luz-61b755c890dcaa66daa35942ca87cc00269b0fe9.zip |
feat(filamento): full wasm support by switching to rusqlite
Diffstat (limited to 'filamento/src/chat.rs')
-rw-r--r-- | filamento/src/chat.rs | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/filamento/src/chat.rs b/filamento/src/chat.rs index 557b42b..2aa2282 100644 --- a/filamento/src/chat.rs +++ b/filamento/src/chat.rs @@ -1,5 +1,9 @@ use chrono::{DateTime, Utc}; use jid::JID; +use rusqlite::{ + ToSql, + types::{FromSql, ToSqlOutput, Value}, +}; use uuid::Uuid; #[derive(Debug, Clone)] @@ -27,6 +31,36 @@ pub enum Delivery { Queued, } +impl ToSql for Delivery { + fn to_sql(&self) -> rusqlite::Result<rusqlite::types::ToSqlOutput<'_>> { + Ok(match self { + Delivery::Sending => ToSqlOutput::Owned(Value::Text("sending".to_string())), + Delivery::Written => ToSqlOutput::Owned(Value::Text("written".to_string())), + Delivery::Sent => ToSqlOutput::Owned(Value::Text("sent".to_string())), + Delivery::Delivered => ToSqlOutput::Owned(Value::Text("delivered".to_string())), + Delivery::Read => ToSqlOutput::Owned(Value::Text("read".to_string())), + Delivery::Failed => ToSqlOutput::Owned(Value::Text("failed".to_string())), + Delivery::Queued => ToSqlOutput::Owned(Value::Text("queued".to_string())), + }) + } +} + +impl FromSql for Delivery { + fn column_result(value: rusqlite::types::ValueRef<'_>) -> rusqlite::types::FromSqlResult<Self> { + Ok(match value.as_str()? { + "sending" => Self::Sending, + "written" => Self::Written, + "sent" => Self::Sent, + "delivered" => Self::Delivered, + "read" => Self::Read, + "failed" => Self::Failed, + "queued" => Self::Queued, + // TODO: don't have these lol + value => panic!("unexpected subscription `{value}`"), + }) + } +} + // TODO: user migrations // pub enum Migrated { // Jabber(User), |