aboutsummaryrefslogtreecommitdiffstats
path: root/filamento/src/chat.rs
diff options
context:
space:
mode:
authorLibravatar cel 🌸 <cel@bunny.garden>2025-04-17 17:30:22 +0100
committerLibravatar cel 🌸 <cel@bunny.garden>2025-04-17 17:30:22 +0100
commit61b755c890dcaa66daa35942ca87cc00269b0fe9 (patch)
tree36190a844cfef474d5e11fe473db462bb4a4d135 /filamento/src/chat.rs
parent26d0ee51e232b793bc83ba565c0e9ab820d8d0db (diff)
downloadluz-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.rs34
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),