From 00a59d052848da4d617c3c281c353eacdcb70ebb Mon Sep 17 00:00:00 2001 From: Jonas Platte Date: Sun, 5 Sep 2021 19:53:33 +0200 Subject: [PATCH] state-res: Reduce unnecessary Arc usage --- crates/ruma-state-res/src/event_auth.rs | 64 ++++++++++---------- crates/ruma-state-res/src/lib.rs | 18 +++--- crates/ruma-state-res/tests/event_sorting.rs | 2 +- 3 files changed, 42 insertions(+), 42 deletions(-) diff --git a/crates/ruma-state-res/src/event_auth.rs b/crates/ruma-state-res/src/event_auth.rs index b27021ac..0bcea39c 100644 --- a/crates/ruma-state-res/src/event_auth.rs +++ b/crates/ruma-state-res/src/event_auth.rs @@ -86,9 +86,9 @@ pub fn auth_types_for_event( /// This returns an `Error` only when serialization fails or some other fatal outcome. pub fn auth_check( room_version: &RoomVersion, - incoming_event: &Arc, - prev_event: Option>, - current_third_party_invite: Option>, + incoming_event: &E, + prev_event: Option<&E>, + current_third_party_invite: Option<&E>, fetch_state: F, ) -> Result where @@ -231,14 +231,14 @@ where if !valid_membership_change( &target_user, - fetch_state(&EventType::RoomMember, target_user.as_str()), + fetch_state(&EventType::RoomMember, target_user.as_str()).as_deref(), sender, - sender_member_event, + sender_member_event.as_deref(), incoming_event.content(), - prev_event, + prev_event.as_deref(), current_third_party_invite, - power_levels_event, - fetch_state(&EventType::RoomJoinRules, ""), + power_levels_event.as_deref(), + fetch_state(&EventType::RoomJoinRules, "").as_deref(), )? { return Ok(false); } @@ -304,7 +304,7 @@ where // If the event type's required power level is greater than the sender's power level, reject // If the event has a state_key that starts with an @ and does not match the sender, reject. - if !can_send_event(incoming_event, power_levels_event.as_ref(), sender_power_level) { + if !can_send_event(incoming_event, power_levels_event.as_deref(), sender_power_level) { warn!("user cannot send event"); return Ok(false); } @@ -315,7 +315,7 @@ where if let Some(required_pwr_lvl) = check_power_levels( room_version, incoming_event, - power_levels_event.as_ref(), + power_levels_event.as_deref(), sender_power_level, ) { if !required_pwr_lvl { @@ -373,14 +373,14 @@ where #[allow(clippy::too_many_arguments)] fn valid_membership_change( target_user: &UserId, - target_user_membership_event: Option>, + target_user_membership_event: Option<&E>, sender: &UserId, - sender_membership_event: Option>, + sender_membership_event: Option<&E>, content: serde_json::Value, - prev_event: Option>, - current_third_party_invite: Option>, - power_levels_event: Option>, - join_rules_event: Option>, + prev_event: Option<&E>, + current_third_party_invite: Option<&E>, + power_levels_event: Option<&E>, + join_rules_event: Option<&E>, ) -> Result { let target_membership = serde_json::from_value::( content.get("membership").expect("we test before that this field exists").clone(), @@ -564,7 +564,7 @@ fn valid_membership_change( /// Is the user allowed to send a specific event based on the rooms power levels. /// /// Does the event have the correct userId as its state_key if it's not the "" state_key. -fn can_send_event(event: &Arc, ple: Option<&Arc>, user_level: Int) -> bool { +fn can_send_event(event: &E, ple: Option<&E>, user_level: Int) -> bool { let event_type_power_level = get_send_level(event.event_type(), event.state_key(), ple); debug!("{} ev_type {} usr {}", event.event_id(), event_type_power_level, user_level); @@ -585,8 +585,8 @@ fn can_send_event(event: &Arc, ple: Option<&Arc>, user_level: In /// Confirm that the event sender has the required power levels. fn check_power_levels( room_version: &RoomVersion, - power_event: &Arc, - previous_power_event: Option<&Arc>, + power_event: &E, + previous_power_event: Option<&E>, user_level: Int, ) -> Option where @@ -738,7 +738,7 @@ fn get_deserialize_levels( /// Does the event redacting come from a user with enough power to redact the given event. fn check_redaction( _room_version: &RoomVersion, - redaction_event: &Arc, + redaction_event: &E, user_level: Int, redact_level: Int, ) -> Result { @@ -764,7 +764,7 @@ fn check_redaction( fn get_send_level( e_type: &EventType, state_key: Option<&str>, - power_lvl: Option<&Arc>, + power_lvl: Option<&E>, ) -> Int { power_lvl .and_then(|ple| { @@ -787,7 +787,7 @@ fn verify_third_party_invite( target_user: Option<&UserId>, sender: &UserId, tp_id: &ThirdPartyInvite, - current_third_party_invite: Option>, + current_third_party_invite: Option<&E>, ) -> bool { // 1. Check for user being banned happens before this is called // checking for mxid and token keys is done by ruma when deserializing @@ -870,14 +870,14 @@ mod tests { assert!(valid_membership_change( &target_user, - fetch_state(EventType::RoomMember, target_user.to_string()), + fetch_state(EventType::RoomMember, target_user.to_string()).as_deref(), &sender, - fetch_state(EventType::RoomMember, sender.to_string()), + fetch_state(EventType::RoomMember, sender.to_string()).as_deref(), requester.content(), - prev_event, + prev_event.as_deref(), None, - fetch_state(EventType::RoomPowerLevels, "".to_owned()), - fetch_state(EventType::RoomJoinRules, "".to_owned()), + fetch_state(EventType::RoomPowerLevels, "".to_owned()).as_deref(), + fetch_state(EventType::RoomJoinRules, "".to_owned()).as_deref(), ) .unwrap()); } @@ -912,14 +912,14 @@ mod tests { assert!(!valid_membership_change( &target_user, - fetch_state(EventType::RoomMember, target_user.to_string()), + fetch_state(EventType::RoomMember, target_user.to_string()).as_deref(), &sender, - fetch_state(EventType::RoomMember, sender.to_string()), + fetch_state(EventType::RoomMember, sender.to_string()).as_deref(), requester.content(), - prev_event, + prev_event.as_deref(), None, - fetch_state(EventType::RoomPowerLevels, "".to_owned()), - fetch_state(EventType::RoomJoinRules, "".to_owned()), + fetch_state(EventType::RoomPowerLevels, "".to_owned()).as_deref(), + fetch_state(EventType::RoomJoinRules, "".to_owned()).as_deref(), ) .unwrap()); } diff --git a/crates/ruma-state-res/src/lib.rs b/crates/ruma-state-res/src/lib.rs index 63282ea6..0c80292f 100644 --- a/crates/ruma-state-res/src/lib.rs +++ b/crates/ruma-state-res/src/lib.rs @@ -343,7 +343,7 @@ where for aid in event.as_ref().map(|pdu| pdu.auth_events()).into_iter().flatten() { if let Some(aev) = fetch_event(aid) { - if is_type_and_key(&aev, &EventType::RoomPowerLevels, "") { + if is_type_and_key(&*aev, &EventType::RoomPowerLevels, "") { pl = Some(aev); break; } @@ -452,9 +452,9 @@ where if auth_check( room_version, - &event, - most_recent_prev_event, - current_third_party, + &*event, + most_recent_prev_event.as_deref(), + current_third_party.as_deref(), |ty, key| auth_events.get(&(ty.clone(), key.to_owned())).cloned(), )? { // add event to resolved state map @@ -506,7 +506,7 @@ where for aid in event.auth_events() { let ev = fetch_event(aid) .ok_or_else(|| Error::NotFound(format!("Failed to find {}", aid)))?; - if is_type_and_key(&ev, &EventType::RoomPowerLevels, "") { + if is_type_and_key(&*ev, &EventType::RoomPowerLevels, "") { pl = Some(aid.clone()); break; } @@ -569,7 +569,7 @@ where for aid in sort_ev.auth_events() { let aev = fetch_event(aid) .ok_or_else(|| Error::NotFound(format!("Failed to find {}", aid)))?; - if is_type_and_key(&aev, &EventType::RoomPowerLevels, "") { + if is_type_and_key(&*aev, &EventType::RoomPowerLevels, "") { event = Some(aev); break; } @@ -610,17 +610,17 @@ where E: Event, F: Fn(&EventId) -> Option>, { - match fetch(event_id).as_ref() { + match fetch(event_id).as_deref() { Some(state) => is_power_event(state), _ => false, } } -pub fn is_type_and_key(ev: &Arc, ev_type: &EventType, state_key: &str) -> bool { +pub fn is_type_and_key(ev: &E, ev_type: &EventType, state_key: &str) -> bool { ev.event_type() == ev_type && ev.state_key() == Some(state_key) } -pub fn is_power_event(event: &Arc) -> bool { +pub fn is_power_event(event: &E) -> bool { match event.event_type() { EventType::RoomPowerLevels | EventType::RoomJoinRules | EventType::RoomCreate => { event.state_key() == Some("") diff --git a/crates/ruma-state-res/tests/event_sorting.rs b/crates/ruma-state-res/tests/event_sorting.rs index 6077da18..f2497785 100644 --- a/crates/ruma-state-res/tests/event_sorting.rs +++ b/crates/ruma-state-res/tests/event_sorting.rs @@ -23,7 +23,7 @@ fn test_event_sort() { let power_events = event_map .values() - .filter(|pdu| is_power_event(pdu)) + .filter(|&pdu| is_power_event(&**pdu)) .map(|pdu| pdu.event_id().clone()) .collect::>();