refactor: change Channel::id to return a reference

This commit is contained in:
Zomatree
2024-07-31 00:05:40 +01:00
parent b45ae2cd4d
commit 4fc46f765b
18 changed files with 37 additions and 35 deletions

View File

@@ -417,13 +417,13 @@ impl Channel {
} }
/// Clone this channel's id /// Clone this channel's id
pub fn id(&self) -> String { pub fn id(&self) -> &str {
match self { match self {
Channel::DirectMessage { id, .. } Channel::DirectMessage { id, .. }
| Channel::Group { id, .. } | Channel::Group { id, .. }
| Channel::SavedMessages { id, .. } | Channel::SavedMessages { id, .. }
| Channel::TextChannel { id, .. } | Channel::TextChannel { id, .. }
| Channel::VoiceChannel { id, .. } => id.clone(), | Channel::VoiceChannel { id, .. } => id,
} }
} }

View File

@@ -266,7 +266,7 @@ impl AbstractChannels for MongoDb {
.await?; .await?;
// Delete the channel itself // Delete the channel itself
query!(self, delete_one_by_id, COL, &channel.id()).map(|_| ()) query!(self, delete_one_by_id, COL, channel.id()).map(|_| ())
} }
} }

View File

@@ -11,7 +11,7 @@ impl AbstractChannels for ReferenceDb {
/// Insert a new channel in the database /// Insert a new channel in the database
async fn insert_channel(&self, channel: &Channel) -> Result<()> { async fn insert_channel(&self, channel: &Channel) -> Result<()> {
let mut channels = self.channels.lock().await; let mut channels = self.channels.lock().await;
if let Entry::Vacant(entry) = channels.entry(channel.id()) { if let Entry::Vacant(entry) = channels.entry(channel.id().to_string()) {
entry.insert(channel.clone()); entry.insert(channel.clone());
Ok(()) Ok(())
} else { } else {
@@ -148,7 +148,7 @@ impl AbstractChannels for ReferenceDb {
// Delete a channel // Delete a channel
async fn delete_channel(&self, channel: &Channel) -> Result<()> { async fn delete_channel(&self, channel: &Channel) -> Result<()> {
let mut channels = self.channels.lock().await; let mut channels = self.channels.lock().await;
if channels.remove(&channel.id()).is_some() { if channels.remove(channel.id()).is_some() {
Ok(()) Ok(())
} else { } else {
Err(create_error!(NotFound)) Err(create_error!(NotFound))

View File

@@ -292,7 +292,7 @@ impl Message {
let message_id = Ulid::new().to_string(); let message_id = Ulid::new().to_string();
let mut message = Message { let mut message = Message {
id: message_id.clone(), id: message_id.clone(),
channel: channel.id(), channel: channel.id().to_string(),
masquerade: data.masquerade.map(|masquerade| masquerade.into()), masquerade: data.masquerade.map(|masquerade| masquerade.into()),
interactions: data interactions: data
.interactions .interactions
@@ -479,7 +479,7 @@ impl Message {
PushNotification::from( PushNotification::from(
self.clone().into_model(None, None), self.clone().into_model(None, None),
Some(author), Some(author),
&channel.id(), channel.id(),
) )
.await, .await,
) )

View File

@@ -175,7 +175,7 @@ impl Server {
vec![] vec![]
}; };
server.channels = channels.iter().map(|c| c.id()).collect(); server.channels = channels.iter().map(|c| c.id().to_string()).collect();
db.insert_server(&server).await?; db.insert_server(&server).await?;
Ok((server, channels)) Ok((server, channels))
} }

View File

@@ -93,7 +93,9 @@ mod test {
.client .client
.post(format!("/bots/{}/invite", bot.id)) .post(format!("/bots/{}/invite", bot.id))
.header(ContentType::JSON) .header(ContentType::JSON)
.body(json!(v0::InviteBotDestination::Group { group: group.id() }).to_string()) .body(json!(v0::InviteBotDestination::Group {
group: group.id().to_string()
}).to_string())
.header(Header::new("x-session-token", session.token.to_string())) .header(Header::new("x-session-token", session.token.to_string()))
.dispatch() .dispatch()
.await; .await;
@@ -102,8 +104,8 @@ mod test {
drop(response); drop(response);
let event = harness let event = harness
.wait_for_event(&group.id(), |event| match event { .wait_for_event(group.id(), |event| match event {
EventV1::ChannelGroupJoin { id, .. } => id == &group.id(), EventV1::ChannelGroupJoin { id, .. } => id == group.id(),
_ => false, _ => false,
}) })
.await; .await;

View File

@@ -69,7 +69,7 @@ mod test {
let event = harness let event = harness
.wait_for_event(&format!("{}!", user.id), |event| match event { .wait_for_event(&format!("{}!", user.id), |event| match event {
EventV1::ChannelAck { id, .. } => id == &group.id(), EventV1::ChannelAck { id, .. } => id == group.id(),
_ => false, _ => false,
}) })
.await; .await;

View File

@@ -82,8 +82,8 @@ mod test {
drop(response); drop(response);
harness harness
.wait_for_event(&group.id(), |event| match event { .wait_for_event(group.id(), |event| match event {
EventV1::ChannelDelete { id, .. } => id == &group.id(), EventV1::ChannelDelete { id, .. } => id == group.id(),
_ => false, _ => false,
}) })
.await; .await;

View File

@@ -102,8 +102,8 @@ mod test {
.await; .await;
let event = harness let event = harness
.wait_for_event(&group.id(), |event| match event { .wait_for_event(group.id(), |event| match event {
EventV1::ChannelGroupJoin { id, .. } => id == &group.id(), EventV1::ChannelGroupJoin { id, .. } => id == group.id(),
_ => false, _ => false,
}) })
.await; .await;
@@ -113,7 +113,7 @@ mod test {
_ => unreachable!(), _ => unreachable!(),
}; };
let message = harness.wait_for_message(&group.id()).await; let message = harness.wait_for_message(group.id()).await;
assert_eq!( assert_eq!(
message.system, message.system,

View File

@@ -106,8 +106,8 @@ mod test {
.await; .await;
let event = harness let event = harness
.wait_for_event(&group.id(), |event| match event { .wait_for_event(group.id(), |event| match event {
EventV1::ChannelGroupJoin { id, .. } => id == &group.id(), EventV1::ChannelGroupJoin { id, .. } => id == group.id(),
_ => false, _ => false,
}) })
.await; .await;
@@ -117,7 +117,7 @@ mod test {
_ => unreachable!(), _ => unreachable!(),
}; };
let message = harness.wait_for_message(&group.id()).await; let message = harness.wait_for_message(group.id()).await;
assert_eq!( assert_eq!(
message.system, message.system,

View File

@@ -27,7 +27,7 @@ pub async fn clear_reactions(
.throw_if_lacking_channel_permission(ChannelPermission::ManageMessages)?; .throw_if_lacking_channel_permission(ChannelPermission::ManageMessages)?;
// Fetch relevant message // Fetch relevant message
let mut message = msg.as_message_in_channel(db, &channel.id()).await?; let mut message = msg.as_message_in_channel(db, channel.id()).await?;
// Clear reactions // Clear reactions
message message

View File

@@ -43,7 +43,7 @@ pub async fn edit(
permissions.throw_if_lacking_channel_permission(ChannelPermission::SendMessage)?; permissions.throw_if_lacking_channel_permission(ChannelPermission::SendMessage)?;
let mut message = msg.as_message_in_channel(db, &channel.id()).await?; let mut message = msg.as_message_in_channel(db, channel.id()).await?;
if message.author != user.id { if message.author != user.id {
return Err(create_error!(CannotEditMessage)); return Err(create_error!(CannotEditMessage));
} }

View File

@@ -25,7 +25,7 @@ pub async fn message_pin(
.await .await
.throw_if_lacking_channel_permission(ChannelPermission::ManageMessages)?; .throw_if_lacking_channel_permission(ChannelPermission::ManageMessages)?;
let mut message = msg.as_message_in_channel(db, &channel.id()).await?; let mut message = msg.as_message_in_channel(db, channel.id()).await?;
if message.pinned.unwrap_or_default() { if message.pinned.unwrap_or_default() {
return Err(create_error!(AlreadyPinned)) return Err(create_error!(AlreadyPinned))
@@ -40,7 +40,7 @@ pub async fn message_pin(
id: message.id.clone(), id: message.id.clone(),
by: user.id.clone() by: user.id.clone()
} }
.into_message(channel.id()) .into_message(channel.id().to_string())
.send( .send(
db, db,
MessageAuthor::System { MessageAuthor::System {
@@ -115,7 +115,7 @@ mod test {
assert_eq!(response.status(), Status::NoContent); assert_eq!(response.status(), Status::NoContent);
drop(response); drop(response);
harness.wait_for_event(&channel.id(), |event| { harness.wait_for_event(channel.id(), |event| {
match event { match event {
EventV1::Message(message) => { EventV1::Message(message) => {
match &message.system { match &message.system {
@@ -131,11 +131,11 @@ mod test {
} }
}).await; }).await;
harness.wait_for_event(&channel.id(), |event| { harness.wait_for_event(channel.id(), |event| {
match event { match event {
EventV1::MessageUpdate { id, channel: channel_id, data, .. } => { EventV1::MessageUpdate { id, channel: channel_id, data, .. } => {
assert_eq!(id, &message.id); assert_eq!(id, &message.id);
assert_eq!(channel_id, &channel.id()); assert_eq!(channel_id, channel.id());
assert_eq!(data.pinned, Some(true)); assert_eq!(data.pinned, Some(true));
true true

View File

@@ -26,7 +26,7 @@ pub async fn react_message(
.throw_if_lacking_channel_permission(ChannelPermission::React)?; .throw_if_lacking_channel_permission(ChannelPermission::React)?;
// Fetch relevant message // Fetch relevant message
let message = msg.as_message_in_channel(db, &channel.id()).await?; let message = msg.as_message_in_channel(db, channel.id()).await?;
// Add the reaction // Add the reaction
message message

View File

@@ -25,7 +25,7 @@ pub async fn message_unpin(
.await .await
.throw_if_lacking_channel_permission(ChannelPermission::ManageMessages)?; .throw_if_lacking_channel_permission(ChannelPermission::ManageMessages)?;
let mut message = msg.as_message_in_channel(db, &channel.id()).await?; let mut message = msg.as_message_in_channel(db, channel.id()).await?;
if !message.pinned.unwrap_or_default() { if !message.pinned.unwrap_or_default() {
return Err(create_error!(NotPinned)) return Err(create_error!(NotPinned))
@@ -37,7 +37,7 @@ pub async fn message_unpin(
id: message.id.clone(), id: message.id.clone(),
by: user.id.clone() by: user.id.clone()
} }
.into_message(channel.id()) .into_message(channel.id().to_string())
.send( .send(
db, db,
MessageAuthor::System { MessageAuthor::System {
@@ -123,7 +123,7 @@ mod test {
assert_eq!(response.status(), Status::NoContent); assert_eq!(response.status(), Status::NoContent);
drop(response); drop(response);
harness.wait_for_event(&channel.id(), |event| { harness.wait_for_event(channel.id(), |event| {
match event { match event {
EventV1::Message(message) => { EventV1::Message(message) => {
match &message.system { match &message.system {
@@ -139,7 +139,7 @@ mod test {
} }
}).await; }).await;
harness.wait_for_event(&channel.id(), |event| { harness.wait_for_event(channel.id(), |event| {
match event { match event {
EventV1::MessageUpdate { id, clear, .. } => { EventV1::MessageUpdate { id, clear, .. } => {
assert_eq!(&message.id, id); assert_eq!(&message.id, id);

View File

@@ -36,7 +36,7 @@ pub async fn unreact_message(
} }
// Fetch relevant message // Fetch relevant message
let message = msg.as_message_in_channel(db, &channel.id()).await?; let message = msg.as_message_in_channel(db, channel.id()).await?;
// Check if we should wipe all of this reaction // Check if we should wipe all of this reaction
if remove_all { if remove_all {

View File

@@ -54,7 +54,7 @@ pub async fn create_webhook(
id: webhook_id, id: webhook_id,
name: data.name, name: data.name,
avatar, avatar,
channel_id: channel.id(), channel_id: channel.id().to_string(),
permissions: *DEFAULT_WEBHOOK_PERMISSIONS, permissions: *DEFAULT_WEBHOOK_PERMISSIONS,
token: Some(nanoid::nanoid!(64)), token: Some(nanoid::nanoid!(64)),
}; };

View File

@@ -25,7 +25,7 @@ pub async fn fetch_webhooks(
.throw_if_lacking_channel_permission(ChannelPermission::ViewChannel)?; .throw_if_lacking_channel_permission(ChannelPermission::ViewChannel)?;
Ok(Json( Ok(Json(
db.fetch_webhooks_for_channel(&channel.id()) db.fetch_webhooks_for_channel(channel.id())
.await? .await?
.into_iter() .into_iter()
.map(|v| v.into()) .map(|v| v.into())