diff --git a/src/api/client_server/alias.rs b/src/api/client_server/alias.rs index 5378dabe..f4856639 100644 --- a/src/api/client_server/alias.rs +++ b/src/api/client_server/alias.rs @@ -157,20 +157,18 @@ pub(crate) async fn get_alias_helper(room_alias: OwnedRoomAliasId) -> Result { for appservice in services().appservice.read().await.values() { if appservice.aliases.is_match(room_alias.as_str()) - && if let Some(opt_result) = services() - .sending - .send_appservice_request( - appservice.registration.clone(), - appservice::query::query_room_alias::v1::Request { - room_alias: room_alias.clone(), - }, - ) - .await - { - opt_result.is_ok() - } else { - false - } { + && matches!( + services() + .sending + .send_appservice_request( + appservice.registration.clone(), + appservice::query::query_room_alias::v1::Request { + room_alias: room_alias.clone(), + }, + ) + .await, + Ok(Some(_opt_result)) + ) { room_id = Some( services() .rooms diff --git a/src/api/client_server/presence.rs b/src/api/client_server/presence.rs index 24ff6d01..eb47cdc4 100644 --- a/src/api/client_server/presence.rs +++ b/src/api/client_server/presence.rs @@ -53,10 +53,7 @@ pub async fn get_presence_route(body: Ruma) -> Result { let room_id = room_id?; - if let Some(presence) = services() - .presence - .get_presence(&room_id, sender_user)? - { + if let Some(presence) = services().presence.get_presence(&room_id, sender_user)? { presence_event = Some(presence); break; } diff --git a/src/api/client_server/sync.rs b/src/api/client_server/sync.rs index 6c1db3b0..fa24aed4 100644 --- a/src/api/client_server/sync.rs +++ b/src/api/client_server/sync.rs @@ -528,10 +528,7 @@ async fn process_room_presence_updates( presence_updates: &mut HashMap, room_id: &RoomId, since: u64, ) -> Result<()> { // Take presence updates from this room - for (user_id, _, presence_event) in services() - .presence - .presence_since(room_id, since) - { + for (user_id, _, presence_event) in services().presence.presence_since(room_id, since) { match presence_updates.entry(user_id) { Entry::Vacant(slot) => { slot.insert(presence_event); diff --git a/src/service/presence/mod.rs b/src/service/presence/mod.rs index 64c97e1f..a31ba53a 100644 --- a/src/service/presence/mod.rs +++ b/src/service/presence/mod.rs @@ -143,9 +143,7 @@ fn process_presence_timer(user_id: &OwnedUserId) -> Result<()> { let mut status_msg = None; for room_id in services().rooms.state_cache.rooms_joined(user_id) { - let presence_event = services() - .presence - .get_presence(&room_id?, user_id)?; + let presence_event = services().presence.get_presence(&room_id?, user_id)?; if let Some(presence_event) = presence_event { presence_state = presence_event.content.presence; diff --git a/src/service/sending/appservice.rs b/src/service/sending/appservice.rs index ce338bc3..f751aa99 100644 --- a/src/service/sending/appservice.rs +++ b/src/service/sending/appservice.rs @@ -10,11 +10,16 @@ use crate::{services, utils, Error, Result}; /// /// Only returns None if there is no url specified in the appservice /// registration file -pub(crate) async fn send_request(registration: Registration, request: T) -> Option> +pub(crate) async fn send_request(registration: Registration, request: T) -> Result> where T: OutgoingRequest + Debug, { - let destination = registration.url?; + let destination = match registration.url { + Some(url) => url, + None => { + return Ok(None); + }, + }; let hs_token = registration.hs_token.as_str(); @@ -42,8 +47,7 @@ where ); *http_request.uri_mut() = parts.try_into().expect("our manipulation is always valid"); - let mut reqwest_request = - reqwest::Request::try_from(http_request).expect("all http requests are valid reqwest requests"); + let mut reqwest_request = reqwest::Request::try_from(http_request)?; *reqwest_request.timeout_mut() = Some(Duration::from_secs(120)); @@ -62,7 +66,7 @@ where "Could not send request to appservice {} at {}: {}", registration.id, destination, e ); - return Some(Err(e.into())); + return Err(e.into()); }, }; @@ -99,8 +103,8 @@ where .expect("reqwest body is valid http body"), ); - Some(response.map_err(|_| { + response.map(Some).map_err(|_| { warn!("Appservice returned invalid response bytes {}\n{}", destination, url); Error::BadServerResponse("Server returned bad response.") - })) + }) } diff --git a/src/service/sending/mod.rs b/src/service/sending/mod.rs index 8ce2eb95..eeeab84d 100644 --- a/src/service/sending/mod.rs +++ b/src/service/sending/mod.rs @@ -250,7 +250,7 @@ impl Service { /// registration file pub async fn send_appservice_request( &self, registration: Registration, request: T, - ) -> Option> + ) -> Result> where T: OutgoingRequest + Debug, { @@ -487,10 +487,7 @@ pub fn select_edus_presence( // Look for presence updates in this room let mut presence_updates = Vec::new(); - for (user_id, count, presence_event) in services() - .presence - .presence_since(room_id, since) - { + for (user_id, count, presence_event) in services().presence.presence_since(room_id, since) { if count > *max_edu_count { *max_edu_count = count; } @@ -655,10 +652,8 @@ async fn handle_events_kind_appservice( ) .await { - None => Ok(kind.clone()), - Some(op_resp) => op_resp - .map(|_response| kind.clone()) - .map_err(|e| (kind.clone(), e)), + Ok(_) => Ok(kind.clone()), + Err(e) => Err((kind.clone(), e)), }; drop(permit);