Update euphoxide to version with id newtype wrappers

This commit is contained in:
Joscha 2022-09-26 10:20:47 +02:00
parent 2d88513a28
commit 374c4c4f79
10 changed files with 131 additions and 114 deletions

View file

@ -7,7 +7,7 @@ use anyhow::bail;
use cookie::{Cookie, CookieJar};
use euphoxide::api::packet::ParsedPacket;
use euphoxide::api::{
Auth, AuthOption, Data, Log, Login, Logout, Nick, Send, Snowflake, Time, UserId,
Auth, AuthOption, Data, Log, Login, Logout, MessageId, Nick, Send, Time, UserId,
};
use euphoxide::conn::{ConnRx, ConnTx, Joining, Status};
use log::{error, info, warn};
@ -50,7 +50,7 @@ enum Event {
RequestLogs,
Auth(String),
Nick(String),
Send(Option<Snowflake>, String, oneshot::Sender<Snowflake>),
Send(Option<MessageId>, String, oneshot::Sender<MessageId>),
Login { email: String, password: String },
Logout,
}
@ -66,7 +66,7 @@ struct State {
conn_tx: Option<ConnTx>,
/// `None` before any `snapshot-event`, then either `Some(None)` or
/// `Some(Some(id))`.
last_msg_id: Option<Option<Snowflake>>,
last_msg_id: Option<Option<MessageId>>,
requesting_logs: Arc<Mutex<bool>>,
}
@ -419,9 +419,9 @@ impl State {
fn on_send(
&self,
parent: Option<Snowflake>,
parent: Option<MessageId>,
content: String,
id_tx: oneshot::Sender<Snowflake>,
id_tx: oneshot::Sender<MessageId>,
) {
if let Some(conn_tx) = &self.conn_tx {
let conn_tx = conn_tx.clone();
@ -527,9 +527,9 @@ impl Room {
pub fn send(
&self,
parent: Option<Snowflake>,
parent: Option<MessageId>,
content: String,
) -> Result<oneshot::Receiver<Snowflake>, Error> {
) -> Result<oneshot::Receiver<MessageId>, Error> {
let (id_tx, id_rx) = oneshot::channel();
self.event_tx
.send(Event::Send(parent, content, id_tx))

View file

@ -1,5 +1,5 @@
use crossterm::style::{Color, ContentStyle, Stylize};
use euphoxide::api::{Snowflake, Time};
use euphoxide::api::{MessageId, Snowflake, Time};
use time::OffsetDateTime;
use toss::styled::Styled;
@ -89,8 +89,8 @@ fn highlight_content(content: &str, base_style: ContentStyle) -> Styled {
#[derive(Debug, Clone)]
pub struct SmallMessage {
pub id: Snowflake,
pub parent: Option<Snowflake>,
pub id: MessageId,
pub parent: Option<MessageId>,
pub time: Time,
pub nick: String,
pub content: String,
@ -135,7 +135,7 @@ fn styled_editor_content(content: &str) -> Styled {
}
impl Msg for SmallMessage {
type Id = Snowflake;
type Id = MessageId;
fn id(&self) -> Self::Id {
self.id
@ -150,7 +150,7 @@ impl Msg for SmallMessage {
}
fn last_possible_id() -> Self::Id {
Snowflake::MAX
MessageId(Snowflake::MAX)
}
}

View file

@ -1,7 +1,7 @@
use std::fs::File;
use std::io::{BufWriter, Write};
use euphoxide::api::Snowflake;
use euphoxide::api::MessageId;
use time::format_description::FormatItem;
use time::macros::format_description;
use unicode_width::UnicodeWidthStr;
@ -41,7 +41,7 @@ pub async fn export_to_file(
fn write_tree(
file: &mut BufWriter<File>,
tree: &Tree<SmallMessage>,
id: Snowflake,
id: MessageId,
indent: usize,
) -> anyhow::Result<()> {
let indent_string = "| ".repeat(indent);

View file

@ -44,7 +44,7 @@ fn session_lines(mut text: Styled, session: &SessionView) -> Styled {
line!(text, "name (raw)", session.name, debug);
line!(text, "server_id", session.server_id);
line!(text, "server_era", session.server_era);
line!(text, "session_id", session.session_id);
line!(text, "session_id", session.session_id.0);
line!(text, "is_staff", session.is_staff, yes or no);
line!(text, "is_manager", session.is_manager, yes or no);
line!(
@ -64,8 +64,8 @@ fn session_lines(mut text: Styled, session: &SessionView) -> Styled {
}
fn message_lines(mut text: Styled, msg: &Message) -> Styled {
line!(text, "id", msg.id);
line!(text, "parent", msg.parent, optional);
line!(text, "id", msg.id.0);
line!(text, "parent", msg.parent.map(|p| p.0), optional);
line!(text, "previous_edit_id", msg.previous_edit_id, optional);
line!(text, "time", msg.time.0);
line!(text, "encryption_key_id", &msg.encryption_key_id, optional);

View file

@ -1,7 +1,7 @@
use std::iter;
use crossterm::style::{Color, ContentStyle, Stylize};
use euphoxide::api::{SessionType, SessionView, UserId};
use euphoxide::api::{SessionId, SessionType, SessionView};
use euphoxide::conn::Joined;
use toss::styled::Styled;
@ -12,13 +12,13 @@ use crate::ui::widgets::list::{List, ListState};
use crate::ui::widgets::text::Text;
use crate::ui::widgets::BoxedWidget;
pub fn widget(state: &ListState<UserId>, joined: &Joined, focused: bool) -> BoxedWidget {
pub fn widget(state: &ListState<SessionId>, joined: &Joined, focused: bool) -> BoxedWidget {
let mut list = state.widget().focus(focused);
render_rows(&mut list, joined);
list.into()
}
fn render_rows(list: &mut List<UserId>, joined: &Joined) {
fn render_rows(list: &mut List<SessionId>, joined: &Joined) {
let mut people = vec![];
let mut bots = vec![];
let mut lurkers = vec![];
@ -49,7 +49,7 @@ fn render_rows(list: &mut List<UserId>, joined: &Joined) {
}
fn render_section(
list: &mut List<UserId>,
list: &mut List<SessionId>,
name: &str,
sessions: &[&SessionView],
own_session: &SessionView,
@ -74,7 +74,7 @@ fn render_section(
}
}
fn render_row(list: &mut List<UserId>, session: &SessionView, own_session: &SessionView) {
fn render_row(list: &mut List<SessionId>, session: &SessionView, own_session: &SessionView) {
let (name, style, style_inv, perms_style_inv) = if session.name.is_empty() {
let name = "lurk";
let style = ContentStyle::default().grey();
@ -111,7 +111,7 @@ fn render_row(list: &mut List<UserId>, session: &SessionView, own_session: &Sess
.then(name, style_inv)
.then(perms, perms_style_inv);
list.add_sel(
session.id.clone(),
session.session_id.clone(),
Text::new(normal),
Background::new(Text::new(selected)).style(style_inv),
);

View file

@ -2,7 +2,7 @@ use std::collections::VecDeque;
use std::sync::Arc;
use crossterm::style::{ContentStyle, Stylize};
use euphoxide::api::{Data, Message, PacketType, SessionView, Snowflake, UserId};
use euphoxide::api::{Data, Message, MessageId, PacketType, SessionId, SessionView};
use euphoxide::conn::{Joined, Joining, Status};
use parking_lot::FairMutex;
use tokio::sync::oneshot::error::TryRecvError;
@ -78,9 +78,9 @@ pub struct EuphRoom {
popups: VecDeque<RoomPopup>,
chat: ChatState<euph::SmallMessage, EuphRoomVault>,
last_msg_sent: Option<oneshot::Receiver<Snowflake>>,
last_msg_sent: Option<oneshot::Receiver<MessageId>>,
nick_list: ListState<UserId>,
nick_list: ListState<SessionId>,
}
impl EuphRoom {
@ -501,7 +501,7 @@ impl EuphRoom {
if let RoomStatus::Connected(Status::Joined(joined)) = status {
// TODO Fix euphoxide to use session_id as hash
if let Some(id) = self.nick_list.cursor() {
if id == joined.session.id {
if id == joined.session.session_id {
self.state = State::InspectSession(joined.session.clone());
} else if let Some(session) = joined.listing.get(&id) {
self.state = State::InspectSession(session.clone());

View file

@ -3,7 +3,7 @@ use std::str::FromStr;
use async_trait::async_trait;
use cookie::{Cookie, CookieJar};
use euphoxide::api::{Message, SessionView, Snowflake, Time, UserId};
use euphoxide::api::{Message, MessageId, SessionId, SessionView, Snowflake, Time, UserId};
use rusqlite::types::{FromSql, FromSqlError, ToSqlOutput, Value, ValueRef};
use rusqlite::{named_params, params, Connection, OptionalExtension, ToSql, Transaction};
use time::OffsetDateTime;
@ -86,63 +86,63 @@ impl EuphRoomVault {
#[async_trait]
impl MsgStore<SmallMessage> for EuphRoomVault {
async fn path(&self, id: &Snowflake) -> Path<Snowflake> {
async fn path(&self, id: &MessageId) -> Path<MessageId> {
self.path(*id).await
}
async fn msg(&self, id: &Snowflake) -> Option<SmallMessage> {
async fn msg(&self, id: &MessageId) -> Option<SmallMessage> {
self.msg(*id).await
}
async fn tree(&self, root_id: &Snowflake) -> Tree<SmallMessage> {
async fn tree(&self, root_id: &MessageId) -> Tree<SmallMessage> {
self.tree(*root_id).await
}
async fn first_root_id(&self) -> Option<Snowflake> {
async fn first_root_id(&self) -> Option<MessageId> {
self.first_root_id().await
}
async fn last_root_id(&self) -> Option<Snowflake> {
async fn last_root_id(&self) -> Option<MessageId> {
self.last_root_id().await
}
async fn prev_root_id(&self, root_id: &Snowflake) -> Option<Snowflake> {
async fn prev_root_id(&self, root_id: &MessageId) -> Option<MessageId> {
self.prev_root_id(*root_id).await
}
async fn next_root_id(&self, root_id: &Snowflake) -> Option<Snowflake> {
async fn next_root_id(&self, root_id: &MessageId) -> Option<MessageId> {
self.next_root_id(*root_id).await
}
async fn oldest_msg_id(&self) -> Option<Snowflake> {
async fn oldest_msg_id(&self) -> Option<MessageId> {
self.oldest_msg_id().await
}
async fn newest_msg_id(&self) -> Option<Snowflake> {
async fn newest_msg_id(&self) -> Option<MessageId> {
self.newest_msg_id().await
}
async fn older_msg_id(&self, id: &Snowflake) -> Option<Snowflake> {
async fn older_msg_id(&self, id: &MessageId) -> Option<MessageId> {
self.older_msg_id(*id).await
}
async fn newer_msg_id(&self, id: &Snowflake) -> Option<Snowflake> {
async fn newer_msg_id(&self, id: &MessageId) -> Option<MessageId> {
self.newer_msg_id(*id).await
}
async fn oldest_unseen_msg_id(&self) -> Option<Snowflake> {
async fn oldest_unseen_msg_id(&self) -> Option<MessageId> {
self.oldest_unseen_msg_id().await
}
async fn newest_unseen_msg_id(&self) -> Option<Snowflake> {
async fn newest_unseen_msg_id(&self) -> Option<MessageId> {
self.newest_unseen_msg_id().await
}
async fn older_unseen_msg_id(&self, id: &Snowflake) -> Option<Snowflake> {
async fn older_unseen_msg_id(&self, id: &MessageId) -> Option<MessageId> {
self.older_unseen_msg_id(*id).await
}
async fn newer_unseen_msg_id(&self, id: &Snowflake) -> Option<Snowflake> {
async fn newer_unseen_msg_id(&self, id: &MessageId) -> Option<MessageId> {
self.newer_unseen_msg_id(*id).await
}
@ -150,11 +150,11 @@ impl MsgStore<SmallMessage> for EuphRoomVault {
self.unseen_msgs_count().await
}
async fn set_seen(&self, id: &Snowflake, seen: bool) {
async fn set_seen(&self, id: &MessageId, seen: bool) {
self.set_seen(*id, seen);
}
async fn set_older_seen(&self, id: &Snowflake, seen: bool) {
async fn set_older_seen(&self, id: &MessageId, seen: bool) {
self.set_older_seen(*id, seen);
}
}
@ -247,28 +247,28 @@ requests! {
Delete : delete(room: String);
// Message
AddMsg : add_msg(room: String, msg: Box<Message>, prev_msg_id: Option<Snowflake>, own_user_id: Option<UserId>);
AddMsgs : add_msgs(room: String, msgs: Vec<Message>, next_msg_id: Option<Snowflake>, own_user_id: Option<UserId>);
GetLastSpan : last_span(room: String) -> Option<(Option<Snowflake>, Option<Snowflake>)>;
GetPath : path(room: String, id: Snowflake) -> Path<Snowflake>;
GetMsg : msg(room: String, id: Snowflake) -> Option<SmallMessage>;
GetFullMsg : full_msg(room: String, id: Snowflake) -> Option<Message>;
GetTree : tree(room: String, root_id: Snowflake) -> Tree<SmallMessage>;
GetFirstRootId : first_root_id(room: String) -> Option<Snowflake>;
GetLastRootId : last_root_id(room: String) -> Option<Snowflake>;
GetPrevRootId : prev_root_id(room: String, root_id: Snowflake) -> Option<Snowflake>;
GetNextRootId : next_root_id(room: String, root_id: Snowflake) -> Option<Snowflake>;
GetOldestMsgId : oldest_msg_id(room: String) -> Option<Snowflake>;
GetNewestMsgId : newest_msg_id(room: String) -> Option<Snowflake>;
GetOlderMsgId : older_msg_id(room: String, id: Snowflake) -> Option<Snowflake>;
GetNewerMsgId : newer_msg_id(room: String, id: Snowflake) -> Option<Snowflake>;
GetOldestUnseenMsgId : oldest_unseen_msg_id(room: String) -> Option<Snowflake>;
GetNewestUnseenMsgId : newest_unseen_msg_id(room: String) -> Option<Snowflake>;
GetOlderUnseenMsgId : older_unseen_msg_id(room: String, id: Snowflake) -> Option<Snowflake>;
GetNewerUnseenMsgId : newer_unseen_msg_id(room: String, id: Snowflake) -> Option<Snowflake>;
AddMsg : add_msg(room: String, msg: Box<Message>, prev_msg_id: Option<MessageId>, own_user_id: Option<UserId>);
AddMsgs : add_msgs(room: String, msgs: Vec<Message>, next_msg_id: Option<MessageId>, own_user_id: Option<UserId>);
GetLastSpan : last_span(room: String) -> Option<(Option<MessageId>, Option<MessageId>)>;
GetPath : path(room: String, id: MessageId) -> Path<MessageId>;
GetMsg : msg(room: String, id: MessageId) -> Option<SmallMessage>;
GetFullMsg : full_msg(room: String, id: MessageId) -> Option<Message>;
GetTree : tree(room: String, root_id: MessageId) -> Tree<SmallMessage>;
GetFirstRootId : first_root_id(room: String) -> Option<MessageId>;
GetLastRootId : last_root_id(room: String) -> Option<MessageId>;
GetPrevRootId : prev_root_id(room: String, root_id: MessageId) -> Option<MessageId>;
GetNextRootId : next_root_id(room: String, root_id: MessageId) -> Option<MessageId>;
GetOldestMsgId : oldest_msg_id(room: String) -> Option<MessageId>;
GetNewestMsgId : newest_msg_id(room: String) -> Option<MessageId>;
GetOlderMsgId : older_msg_id(room: String, id: MessageId) -> Option<MessageId>;
GetNewerMsgId : newer_msg_id(room: String, id: MessageId) -> Option<MessageId>;
GetOldestUnseenMsgId : oldest_unseen_msg_id(room: String) -> Option<MessageId>;
GetNewestUnseenMsgId : newest_unseen_msg_id(room: String) -> Option<MessageId>;
GetOlderUnseenMsgId : older_unseen_msg_id(room: String, id: MessageId) -> Option<MessageId>;
GetNewerUnseenMsgId : newer_unseen_msg_id(room: String, id: MessageId) -> Option<MessageId>;
GetUnseenMsgsCount : unseen_msgs_count(room: String) -> usize;
SetSeen : set_seen(room: String, id: Snowflake, seen: bool);
SetOlderSeen : set_older_seen(room: String, id: Snowflake, seen: bool);
SetSeen : set_seen(room: String, id: MessageId, seen: bool);
SetOlderSeen : set_older_seen(room: String, id: MessageId, seen: bool);
GetChunkAtOffset : chunk_at_offset(room: String, amount: usize, offset: usize) -> Vec<Message>;
}
@ -417,8 +417,8 @@ fn insert_msgs(
for msg in msgs {
insert_msg.execute(named_params! {
":room": room,
":id": WSnowflake(msg.id),
":parent": msg.parent.map(WSnowflake),
":id": WSnowflake(msg.id.0),
":parent": msg.parent.map(|id| WSnowflake(id.0)),
":previous_edit_id": msg.previous_edit_id.map(WSnowflake),
":time": WTime(msg.time),
":content": msg.content,
@ -430,7 +430,7 @@ fn insert_msgs(
":name": msg.sender.name,
":server_id": msg.sender.server_id,
":server_era": msg.sender.server_era,
":session_id": msg.sender.session_id,
":session_id": msg.sender.session_id.0,
":is_staff": msg.sender.is_staff,
":is_manager": msg.sender.is_manager,
":client_address": msg.sender.client_address,
@ -445,8 +445,8 @@ fn insert_msgs(
fn add_span(
tx: &Transaction<'_>,
room: &str,
start: Option<Snowflake>,
end: Option<Snowflake>,
start: Option<MessageId>,
end: Option<MessageId>,
) -> rusqlite::Result<()> {
// Retrieve all spans for the room
let mut spans = tx
@ -458,8 +458,8 @@ fn add_span(
",
)?
.query_map([room], |row| {
let start = row.get::<_, Option<WSnowflake>>(0)?.map(|s| s.0);
let end = row.get::<_, Option<WSnowflake>>(1)?.map(|s| s.0);
let start = row.get::<_, Option<WSnowflake>>(0)?.map(|s| MessageId(s.0));
let end = row.get::<_, Option<WSnowflake>>(1)?.map(|s| MessageId(s.0));
Ok((start, end))
})?
.collect::<Result<Vec<_>, _>>()?;
@ -469,7 +469,7 @@ fn add_span(
spans.sort_unstable();
// Combine overlapping spans (including newly added span)
let mut cur_span: Option<(Option<Snowflake>, Option<Snowflake>)> = None;
let mut cur_span: Option<(Option<MessageId>, Option<MessageId>)> = None;
let mut result = vec![];
for mut span in spans {
if let Some(cur_span) = &mut cur_span {
@ -510,7 +510,11 @@ fn add_span(
",
)?;
for (start, end) in result {
stmt.execute(params![room, start.map(WSnowflake), end.map(WSnowflake)])?;
stmt.execute(params![
room,
start.map(|id| WSnowflake(id.0)),
end.map(|id| WSnowflake(id.0))
])?;
}
Ok(())
@ -564,8 +568,8 @@ impl Request for GetLastSpan {
)?
.query_row([self.room], |row| {
Ok((
row.get::<_, Option<WSnowflake>>(0)?.map(|s| s.0),
row.get::<_, Option<WSnowflake>>(1)?.map(|s| s.0),
row.get::<_, Option<WSnowflake>>(0)?.map(|s| MessageId(s.0)),
row.get::<_, Option<WSnowflake>>(1)?.map(|s| MessageId(s.0)),
))
})
.optional()?;
@ -593,8 +597,8 @@ impl Request for GetPath {
ORDER BY id ASC
",
)?
.query_map(params![self.room, WSnowflake(self.id)], |row| {
row.get::<_, WSnowflake>(0).map(|s| s.0)
.query_map(params![self.room, WSnowflake(self.id.0)], |row| {
row.get::<_, WSnowflake>(0).map(|s| MessageId(s.0))
})?
.collect::<rusqlite::Result<_>>()?;
let path = Path::new(path);
@ -613,11 +617,11 @@ impl Request for GetMsg {
WHERE room = ?
AND id = ?
",
params![self.room, WSnowflake(self.id)],
params![self.room, WSnowflake(self.id.0)],
|row| {
Ok(SmallMessage {
id: row.get::<_, WSnowflake>(0)?.0,
parent: row.get::<_, Option<WSnowflake>>(1)?.map(|s| s.0),
id: MessageId(row.get::<_, WSnowflake>(0)?.0),
parent: row.get::<_, Option<WSnowflake>>(1)?.map(|s| MessageId(s.0)),
time: row.get::<_, WTime>(2)?.0,
nick: row.get(3)?,
content: row.get(4)?,
@ -645,10 +649,10 @@ impl Request for GetFullMsg {
)?;
let msg = query
.query_row(params![self.room, WSnowflake(self.id)], |row| {
.query_row(params![self.room, WSnowflake(self.id.0)], |row| {
Ok(Message {
id: row.get::<_, WSnowflake>(0)?.0,
parent: row.get::<_, Option<WSnowflake>>(1)?.map(|s| s.0),
id: MessageId(row.get::<_, WSnowflake>(0)?.0),
parent: row.get::<_, Option<WSnowflake>>(1)?.map(|s| MessageId(s.0)),
previous_edit_id: row.get::<_, Option<WSnowflake>>(2)?.map(|s| s.0),
time: row.get::<_, WTime>(3)?.0,
content: row.get(4)?,
@ -661,7 +665,7 @@ impl Request for GetFullMsg {
name: row.get(10)?,
server_id: row.get(11)?,
server_era: row.get(12)?,
session_id: row.get(13)?,
session_id: SessionId(row.get(13)?),
is_staff: row.get(14)?,
is_manager: row.get(15)?,
client_address: row.get(16)?,
@ -696,10 +700,10 @@ impl Request for GetTree {
ORDER BY id ASC
",
)?
.query_map(params![self.room, WSnowflake(self.root_id)], |row| {
.query_map(params![self.room, WSnowflake(self.root_id.0)], |row| {
Ok(SmallMessage {
id: row.get::<_, WSnowflake>(0)?.0,
parent: row.get::<_, Option<WSnowflake>>(1)?.map(|s| s.0),
id: MessageId(row.get::<_, WSnowflake>(0)?.0),
parent: row.get::<_, Option<WSnowflake>>(1)?.map(|s| MessageId(s.0)),
time: row.get::<_, WTime>(2)?.0,
nick: row.get(3)?,
content: row.get(4)?,
@ -725,7 +729,9 @@ impl Request for GetFirstRootId {
LIMIT 1
",
)?
.query_row([self.room], |row| row.get::<_, WSnowflake>(0).map(|s| s.0))
.query_row([self.room], |row| {
row.get::<_, WSnowflake>(0).map(|s| MessageId(s.0))
})
.optional()?;
let _ = self.result.send(tree);
Ok(())
@ -744,7 +750,9 @@ impl Request for GetLastRootId {
LIMIT 1
",
)?
.query_row([self.room], |row| row.get::<_, WSnowflake>(0).map(|s| s.0))
.query_row([self.room], |row| {
row.get::<_, WSnowflake>(0).map(|s| MessageId(s.0))
})
.optional()?;
let _ = self.result.send(tree);
Ok(())
@ -764,8 +772,8 @@ impl Request for GetPrevRootId {
LIMIT 1
",
)?
.query_row(params![self.room, WSnowflake(self.root_id)], |row| {
row.get::<_, WSnowflake>(0).map(|s| s.0)
.query_row(params![self.room, WSnowflake(self.root_id.0)], |row| {
row.get::<_, WSnowflake>(0).map(|s| MessageId(s.0))
})
.optional()?;
let _ = self.result.send(tree);
@ -786,8 +794,8 @@ impl Request for GetNextRootId {
LIMIT 1
",
)?
.query_row(params![self.room, WSnowflake(self.root_id)], |row| {
row.get::<_, WSnowflake>(0).map(|s| s.0)
.query_row(params![self.room, WSnowflake(self.root_id.0)], |row| {
row.get::<_, WSnowflake>(0).map(|s| MessageId(s.0))
})
.optional()?;
let _ = self.result.send(tree);
@ -807,7 +815,9 @@ impl Request for GetOldestMsgId {
LIMIT 1
",
)?
.query_row([self.room], |row| row.get::<_, WSnowflake>(0).map(|s| s.0))
.query_row([self.room], |row| {
row.get::<_, WSnowflake>(0).map(|s| MessageId(s.0))
})
.optional()?;
let _ = self.result.send(tree);
Ok(())
@ -826,7 +836,9 @@ impl Request for GetNewestMsgId {
LIMIT 1
",
)?
.query_row([self.room], |row| row.get::<_, WSnowflake>(0).map(|s| s.0))
.query_row([self.room], |row| {
row.get::<_, WSnowflake>(0).map(|s| MessageId(s.0))
})
.optional()?;
let _ = self.result.send(tree);
Ok(())
@ -846,8 +858,8 @@ impl Request for GetOlderMsgId {
LIMIT 1
",
)?
.query_row(params![self.room, WSnowflake(self.id)], |row| {
row.get::<_, WSnowflake>(0).map(|s| s.0)
.query_row(params![self.room, WSnowflake(self.id.0)], |row| {
row.get::<_, WSnowflake>(0).map(|s| MessageId(s.0))
})
.optional()?;
let _ = self.result.send(tree);
@ -867,8 +879,8 @@ impl Request for GetNewerMsgId {
LIMIT 1
",
)?
.query_row(params![self.room, WSnowflake(self.id)], |row| {
row.get::<_, WSnowflake>(0).map(|s| s.0)
.query_row(params![self.room, WSnowflake(self.id.0)], |row| {
row.get::<_, WSnowflake>(0).map(|s| MessageId(s.0))
})
.optional()?;
let _ = self.result.send(tree);
@ -889,7 +901,9 @@ impl Request for GetOldestUnseenMsgId {
LIMIT 1
",
)?
.query_row([self.room], |row| row.get::<_, WSnowflake>(0).map(|s| s.0))
.query_row([self.room], |row| {
row.get::<_, WSnowflake>(0).map(|s| MessageId(s.0))
})
.optional()?;
let _ = self.result.send(tree);
Ok(())
@ -909,7 +923,9 @@ impl Request for GetNewestUnseenMsgId {
LIMIT 1
",
)?
.query_row([self.room], |row| row.get::<_, WSnowflake>(0).map(|s| s.0))
.query_row([self.room], |row| {
row.get::<_, WSnowflake>(0).map(|s| MessageId(s.0))
})
.optional()?;
let _ = self.result.send(tree);
Ok(())
@ -930,8 +946,8 @@ impl Request for GetOlderUnseenMsgId {
LIMIT 1
",
)?
.query_row(params![self.room, WSnowflake(self.id)], |row| {
row.get::<_, WSnowflake>(0).map(|s| s.0)
.query_row(params![self.room, WSnowflake(self.id.0)], |row| {
row.get::<_, WSnowflake>(0).map(|s| MessageId(s.0))
})
.optional()?;
let _ = self.result.send(tree);
@ -953,8 +969,8 @@ impl Request for GetNewerUnseenMsgId {
LIMIT 1
",
)?
.query_row(params![self.room, WSnowflake(self.id)], |row| {
row.get::<_, WSnowflake>(0).map(|s| s.0)
.query_row(params![self.room, WSnowflake(self.id.0)], |row| {
row.get::<_, WSnowflake>(0).map(|s| MessageId(s.0))
})
.optional()?;
let _ = self.result.send(tree);
@ -989,7 +1005,7 @@ impl Request for SetSeen {
WHERE room = :room
AND id = :id
",
named_params! { ":room": self.room, ":id": WSnowflake(self.id), ":seen": self.seen },
named_params! { ":room": self.room, ":id": WSnowflake(self.id.0), ":seen": self.seen },
)?;
Ok(())
}
@ -1005,7 +1021,7 @@ impl Request for SetOlderSeen {
AND id <= :id
AND seen != :seen
",
named_params! { ":room": self.room, ":id": WSnowflake(self.id), ":seen": self.seen },
named_params! { ":room": self.room, ":id": WSnowflake(self.id.0), ":seen": self.seen },
)?;
Ok(())
}
@ -1029,8 +1045,8 @@ impl Request for GetChunkAtOffset {
let messages = query
.query_map(params![self.room, self.amount, self.offset], |row| {
Ok(Message {
id: row.get::<_, WSnowflake>(0)?.0,
parent: row.get::<_, Option<WSnowflake>>(1)?.map(|s| s.0),
id: MessageId(row.get::<_, WSnowflake>(0)?.0),
parent: row.get::<_, Option<WSnowflake>>(1)?.map(|s| MessageId(s.0)),
previous_edit_id: row.get::<_, Option<WSnowflake>>(2)?.map(|s| s.0),
time: row.get::<_, WTime>(3)?.0,
content: row.get(4)?,
@ -1043,7 +1059,7 @@ impl Request for GetChunkAtOffset {
name: row.get(10)?,
server_id: row.get(11)?,
server_era: row.get(12)?,
session_id: row.get(13)?,
session_id: SessionId(row.get(13)?),
is_staff: row.get(14)?,
is_manager: row.get(15)?,
client_address: row.get(16)?,