diff --git a/crates/api_common/src/build_response.rs b/crates/api_common/src/build_response.rs index 374a74d91..328827b2c 100644 --- a/crates/api_common/src/build_response.rs +++ b/crates/api_common/src/build_response.rs @@ -98,7 +98,6 @@ pub async fn send_local_notifs( for mention in mentions .iter() .filter(|m| m.is_local(&context.settings().hostname) && m.name.ne(&person.name)) - .collect::>() { let mention_name = mention.name.clone(); let user_view = LocalUserView::read_from_name(context.pool(), &mention_name).await; diff --git a/crates/api_common/src/utils.rs b/crates/api_common/src/utils.rs index 522a35647..743c119cb 100644 --- a/crates/api_common/src/utils.rs +++ b/crates/api_common/src/utils.rs @@ -640,10 +640,9 @@ pub async fn remove_user_data( let first_mod_communities = CommunityModeratorView::get_community_first_mods(pool).await?; // Filter to only this banned users top communities - let banned_user_first_communities: Vec = first_mod_communities + let banned_user_first_communities = first_mod_communities .into_iter() - .filter(|fmc| fmc.moderator.id == banned_person_id) - .collect(); + .filter(|fmc| fmc.moderator.id == banned_person_id); for first_mod_community in banned_user_first_communities { let community_id = first_mod_community.community.id; diff --git a/crates/api_crud/src/comment/create.rs b/crates/api_crud/src/comment/create.rs index 4ef8686e2..8e5bcde21 100644 --- a/crates/api_crud/src/comment/create.rs +++ b/crates/api_crud/src/comment/create.rs @@ -191,7 +191,7 @@ impl PerformCrud for CreateComment { pub fn check_comment_depth(comment: &Comment) -> Result<(), LemmyError> { let path = &comment.path.0; - let length = path.split('.').collect::>().len(); + let length = path.split('.').count(); if length > MAX_COMMENT_DEPTH_LIMIT { Err(LemmyError::from_message("max_comment_depth_reached")) } else { diff --git a/crates/api_crud/src/community/update.rs b/crates/api_crud/src/community/update.rs index 7494cd342..f4e0c8c94 100644 --- a/crates/api_crud/src/community/update.rs +++ b/crates/api_crud/src/community/update.rs @@ -7,7 +7,6 @@ use lemmy_api_common::{ utils::{local_site_to_slur_regex, local_user_view_from_jwt}, }; use lemmy_db_schema::{ - newtypes::PersonId, source::{ actor_language::{CommunityLanguage, SiteLanguage}, community::{Community, CommunityUpdateForm}, @@ -43,10 +42,11 @@ impl PerformCrud for EditCommunity { // Verify its a mod (only mods can edit it) let community_id = data.community_id; - let mods: Vec = CommunityModeratorView::for_community(context.pool(), community_id) - .await - .map(|v| v.into_iter().map(|m| m.moderator.id).collect())?; - if !mods.contains(&local_user_view.person.id) { + let user_is_mod: bool = CommunityModeratorView::for_community(context.pool(), community_id) + .await? + .into_iter() + .any(|m| m.moderator.id == local_user_view.person.id); + if !user_is_mod { return Err(LemmyError::from_message("not_a_moderator")); } diff --git a/crates/apub/src/activities/community/mod.rs b/crates/apub/src/activities/community/mod.rs index b770c47ac..e2c2428bd 100644 --- a/crates/apub/src/activities/community/mod.rs +++ b/crates/apub/src/activities/community/mod.rs @@ -43,12 +43,11 @@ pub(crate) async fn send_activity_in_community( // send to user followers if !is_mod_action { - inboxes.append( - &mut PersonFollower::list_followers(context.pool(), actor.id) + inboxes.extend( + PersonFollower::list_followers(context.pool(), actor.id) .await? .into_iter() - .map(|p| ApubPerson(p).shared_inbox_or_inbox()) - .collect(), + .map(|p| ApubPerson(p).shared_inbox_or_inbox()), ); } diff --git a/crates/apub/src/activities/create_or_update/comment.rs b/crates/apub/src/activities/create_or_update/comment.rs index 814ec0f87..018554ef3 100644 --- a/crates/apub/src/activities/create_or_update/comment.rs +++ b/crates/apub/src/activities/create_or_update/comment.rs @@ -112,7 +112,7 @@ impl CreateOrUpdateNote { audience: Some(community.id().into()), }; - let tagged_users: Vec> = create_or_update + let tagged_users = create_or_update .tag .iter() .filter_map(|t| { @@ -123,8 +123,7 @@ impl CreateOrUpdateNote { } }) .map(|t| t.href.clone()) - .map(ObjectId::from) - .collect(); + .map(ObjectId::::from); let mut inboxes = vec![]; for t in tagged_users { let person = t.dereference(context).await?; diff --git a/crates/apub/src/collections/community_outbox.rs b/crates/apub/src/collections/community_outbox.rs index c95b64aab..fc6309ec2 100644 --- a/crates/apub/src/collections/community_outbox.rs +++ b/crates/apub/src/collections/community_outbox.rs @@ -41,13 +41,10 @@ impl Collection for ApubCommunityOutbox { owner: &Self::Owner, data: &Data, ) -> Result { - let post_list: Vec = Post::list_for_community(data.pool(), owner.id) - .await? - .into_iter() - .map(Into::into) - .collect(); - let mut ordered_items = vec![]; + let post_list: Vec = Post::list_for_community(data.pool(), owner.id).await?; + let mut ordered_items = Vec::with_capacity(post_list.len()); for post in post_list { + let post = ApubPost::from(post); let person = Person::read(data.pool(), post.creator_id).await?.into(); let create = CreateOrUpdatePage::new(post, &person, owner, CreateOrUpdateType::Create, data).await?; diff --git a/crates/apub/src/lib.rs b/crates/apub/src/lib.rs index a5bc41d1f..c8e3f1c87 100644 --- a/crates/apub/src/lib.rs +++ b/crates/apub/src/lib.rs @@ -132,18 +132,17 @@ pub(crate) fn check_apub_id_valid_with_strictness( if is_strict && !local_site_data.allowed_instances.is_empty() { // need to allow this explicitly because apub receive might contain objects from our local // instance. - let mut allowed_and_local = local_site_data - .allowed_instances - .iter() - .map(|i| i.domain.clone()) - .collect::>(); let local_instance = settings .get_hostname_without_port() .expect("local hostname is valid"); - allowed_and_local.push(local_instance); + let mut allowed_and_local = local_site_data + .allowed_instances + .iter() + .map(|i| &i.domain) + .chain([&local_instance]); let domain = apub_id.domain().expect("apud id has domain").to_string(); - if !allowed_and_local.contains(&domain) { + if !allowed_and_local.any(|i| i == &domain) { return Err(LemmyError::from_message( "Federation forbidden by strict allowlist", )); diff --git a/crates/apub/src/mentions.rs b/crates/apub/src/mentions.rs index 4de822cc7..088f84d0d 100644 --- a/crates/apub/src/mentions.rs +++ b/crates/apub/src/mentions.rs @@ -11,10 +11,7 @@ use lemmy_db_schema::{ traits::Crud, utils::DbPool, }; -use lemmy_utils::{ - error::LemmyError, - utils::mention::{scrape_text_for_mentions, MentionData}, -}; +use lemmy_utils::{error::LemmyError, utils::mention::scrape_text_for_mentions}; use serde::{Deserialize, Serialize}; use serde_json::Value; use url::Url; @@ -67,10 +64,9 @@ pub async fn collect_non_local_mentions( let mentions = scrape_text_for_mentions(&comment.content) .into_iter() // Filter only the non-local ones - .filter(|m| !m.is_local(&context.settings().hostname)) - .collect::>(); + .filter(|m| !m.is_local(&context.settings().hostname)); - for mention in &mentions { + for mention in mentions { let identifier = format!("{}@{}", mention.name, mention.domain); let person = webfinger_resolve_actor::(&identifier, context).await; if let Ok(person) = person { diff --git a/crates/apub/src/protocol/objects/mod.rs b/crates/apub/src/protocol/objects/mod.rs index f35140a9b..a6ecf1fca 100644 --- a/crates/apub/src/protocol/objects/mod.rs +++ b/crates/apub/src/protocol/objects/mod.rs @@ -82,7 +82,7 @@ impl LanguageTag { langs: Vec, pool: &DbPool, ) -> Result, LemmyError> { - let mut language_ids = Vec::new(); + let mut language_ids = Vec::with_capacity(langs.len()); for l in langs { let id = l.identifier; diff --git a/crates/db_schema/src/impls/comment.rs b/crates/db_schema/src/impls/comment.rs index 46045cd10..e78acebfe 100644 --- a/crates/db_schema/src/impls/comment.rs +++ b/crates/db_schema/src/impls/comment.rs @@ -98,8 +98,8 @@ impl Comment { // left join comment c2 on c2.path <@ c.path and c2.path != c.path // group by c.id - let path_split = parent_path.0.split('.').collect::>(); - let parent_id = path_split.get(1); + let mut path_split = parent_path.0.split('.'); + let parent_id = path_split.nth(1); if let Some(parent_id) = parent_id { let top_parent = format!("0.{}", parent_id); diff --git a/crates/db_views_actor/src/community_view.rs b/crates/db_views_actor/src/community_view.rs index abab023a6..b198e527a 100644 --- a/crates/db_views_actor/src/community_view.rs +++ b/crates/db_views_actor/src/community_view.rs @@ -92,13 +92,11 @@ impl CommunityView { ) -> Result { let is_mod = CommunityModeratorView::for_community(pool, community_id) .await - .map(|v| { + .is_ok_and(|v| { v.into_iter() .map(|m| m.moderator.id) - .collect::>() - }) - .unwrap_or_default() - .contains(&person_id); + .any(|i| i == person_id) + }); if is_mod { return Ok(true); } diff --git a/crates/routes/src/feeds.rs b/crates/routes/src/feeds.rs index 5d1f285ca..803de7273 100644 --- a/crates/routes/src/feeds.rs +++ b/crates/routes/src/feeds.rs @@ -414,7 +414,7 @@ fn create_post_items( posts: Vec, protocol_and_hostname: &str, ) -> Result, LemmyError> { - let mut items: Vec = Vec::new(); + let mut items: Vec = Vec::with_capacity(posts.len()); for p in posts { let mut i = ItemBuilder::default();