enable map_unwrap_or lint

This commit is contained in:
Charles Hall 2024-05-14 17:44:06 -07:00
parent 645d88177a
commit 224ba65d06
No known key found for this signature in database
GPG key ID: 7B8E0645816E07CF
10 changed files with 81 additions and 73 deletions

View file

@ -46,6 +46,7 @@ let_underscore_must_use = "warn"
lossy_float_literal = "warn" lossy_float_literal = "warn"
manual_let_else = "warn" manual_let_else = "warn"
manual_string_new = "warn" manual_string_new = "warn"
map_unwrap_or = "warn"
mem_forget = "warn" mem_forget = "warn"
missing_assert_message = "warn" missing_assert_message = "warn"
mod_module_files = "warn" mod_module_files = "warn"

View file

@ -105,8 +105,7 @@ pub(crate) async fn get_context_route(
let start_token = events_before let start_token = events_before
.last() .last()
.map(|(count, _)| count.stringify()) .map_or_else(|| base_token.stringify(), |(count, _)| count.stringify());
.unwrap_or_else(|| base_token.stringify());
let events_before: Vec<_> = events_before let events_before: Vec<_> = events_before
.into_iter() .into_iter()
@ -161,8 +160,7 @@ pub(crate) async fn get_context_route(
let end_token = events_after let end_token = events_after
.last() .last()
.map(|(count, _)| count.stringify()) .map_or_else(|| base_token.stringify(), |(count, _)| count.stringify());
.unwrap_or_else(|| base_token.stringify());
let events_after: Vec<_> = events_after let events_after: Vec<_> = events_after
.into_iter() .into_iter()

View file

@ -24,18 +24,19 @@ pub(crate) async fn update_tag_route(
RoomAccountDataEventType::Tag, RoomAccountDataEventType::Tag,
)?; )?;
let mut tags_event = event let mut tags_event = event.map_or_else(
.map(|e| { || {
serde_json::from_str(e.get())
.map_err(|_| Error::bad_database("Invalid account data event in db."))
})
.unwrap_or_else(|| {
Ok(TagEvent { Ok(TagEvent {
content: TagEventContent { content: TagEventContent {
tags: BTreeMap::new(), tags: BTreeMap::new(),
}, },
}) })
})?; },
|e| {
serde_json::from_str(e.get())
.map_err(|_| Error::bad_database("Invalid account data event in db."))
},
)?;
tags_event tags_event
.content .content
@ -68,18 +69,19 @@ pub(crate) async fn delete_tag_route(
RoomAccountDataEventType::Tag, RoomAccountDataEventType::Tag,
)?; )?;
let mut tags_event = event let mut tags_event = event.map_or_else(
.map(|e| { || {
serde_json::from_str(e.get())
.map_err(|_| Error::bad_database("Invalid account data event in db."))
})
.unwrap_or_else(|| {
Ok(TagEvent { Ok(TagEvent {
content: TagEventContent { content: TagEventContent {
tags: BTreeMap::new(), tags: BTreeMap::new(),
}, },
}) })
})?; },
|e| {
serde_json::from_str(e.get())
.map_err(|_| Error::bad_database("Invalid account data event in db."))
},
)?;
tags_event.content.tags.remove(&body.tag.clone().into()); tags_event.content.tags.remove(&body.tag.clone().into());
@ -109,18 +111,19 @@ pub(crate) async fn get_tags_route(
RoomAccountDataEventType::Tag, RoomAccountDataEventType::Tag,
)?; )?;
let tags_event = event let tags_event = event.map_or_else(
.map(|e| { || {
serde_json::from_str(e.get())
.map_err(|_| Error::bad_database("Invalid account data event in db."))
})
.unwrap_or_else(|| {
Ok(TagEvent { Ok(TagEvent {
content: TagEventContent { content: TagEventContent {
tags: BTreeMap::new(), tags: BTreeMap::new(),
}, },
}) })
})?; },
|e| {
serde_json::from_str(e.get())
.map_err(|_| Error::bad_database("Invalid account data event in db."))
},
)?;
Ok(get_tags::v3::Response { Ok(get_tags::v3::Response {
tags: tags_event.content.tags, tags: tags_event.content.tags,

View file

@ -276,7 +276,7 @@ lasttimelinecount_cache: {lasttimelinecount_cache}\n"
); );
tree tree
}) })
.unwrap_or_else(BTreeMap::new); .unwrap_or_default();
Ok(signingkeys) Ok(signingkeys)
} }

View file

@ -31,11 +31,10 @@ impl service::rooms::user::Data for KeyValueDatabase {
self.userroomid_notificationcount self.userroomid_notificationcount
.get(&userroom_id)? .get(&userroom_id)?
.map(|bytes| { .map_or(Ok(0), |bytes| {
utils::u64_from_bytes(&bytes) utils::u64_from_bytes(&bytes)
.map_err(|_| Error::bad_database("Invalid notification count in db.")) .map_err(|_| Error::bad_database("Invalid notification count in db."))
}) })
.unwrap_or(Ok(0))
} }
fn highlight_count(&self, user_id: &UserId, room_id: &RoomId) -> Result<u64> { fn highlight_count(&self, user_id: &UserId, room_id: &RoomId) -> Result<u64> {
@ -45,11 +44,10 @@ impl service::rooms::user::Data for KeyValueDatabase {
self.userroomid_highlightcount self.userroomid_highlightcount
.get(&userroom_id)? .get(&userroom_id)?
.map(|bytes| { .map_or(Ok(0), |bytes| {
utils::u64_from_bytes(&bytes) utils::u64_from_bytes(&bytes)
.map_err(|_| Error::bad_database("Invalid highlight count in db.")) .map_err(|_| Error::bad_database("Invalid highlight count in db."))
}) })
.unwrap_or(Ok(0))
} }
fn last_notification_read(&self, user_id: &UserId, room_id: &RoomId) -> Result<u64> { fn last_notification_read(&self, user_id: &UserId, room_id: &RoomId) -> Result<u64> {

View file

@ -348,12 +348,11 @@ impl service::users::Data for KeyValueDatabase {
fn last_one_time_keys_update(&self, user_id: &UserId) -> Result<u64> { fn last_one_time_keys_update(&self, user_id: &UserId) -> Result<u64> {
self.userid_lastonetimekeyupdate self.userid_lastonetimekeyupdate
.get(user_id.as_bytes())? .get(user_id.as_bytes())?
.map(|bytes| { .map_or(Ok(0), |bytes| {
utils::u64_from_bytes(&bytes).map_err(|_| { utils::u64_from_bytes(&bytes).map_err(|_| {
Error::bad_database("Count in roomid_lastroomactiveupdate is invalid.") Error::bad_database("Count in roomid_lastroomactiveupdate is invalid.")
}) })
}) })
.unwrap_or(Ok(0))
} }
fn take_one_time_key( fn take_one_time_key(

View file

@ -363,41 +363,46 @@ impl Service {
federation: bool, federation: bool,
) -> Result<bool> { ) -> Result<bool> {
self.room_state_get(room_id, &StateEventType::RoomPowerLevels, "")? self.room_state_get(room_id, &StateEventType::RoomPowerLevels, "")?
.map(|e| { .map_or_else(
serde_json::from_str(e.content.get()) // Falling back on m.room.create to judge power levels
.map(|c: RoomPowerLevelsEventContent| c.into()) || {
.map(|e: RoomPowerLevels| { if let Some(pdu) =
e.user_can_redact_event_of_other(sender) self.room_state_get(room_id, &StateEventType::RoomCreate, "")?
|| e.user_can_redact_own_event(sender) {
&& if let Ok(Some(pdu)) = services().rooms.timeline.get_pdu(redacts) Ok(pdu.sender == sender
{ || if let Ok(Some(pdu)) = services().rooms.timeline.get_pdu(redacts) {
if federation { pdu.sender == sender
pdu.sender().server_name() == sender.server_name() } else {
false
})
} else {
Err(Error::bad_database(
"No m.room.power_levels or m.room.create events in database for room",
))
}
},
|e| {
serde_json::from_str(e.content.get())
.map(|c: RoomPowerLevelsEventContent| c.into())
.map(|e: RoomPowerLevels| {
e.user_can_redact_event_of_other(sender)
|| e.user_can_redact_own_event(sender)
&& if let Ok(Some(pdu)) =
services().rooms.timeline.get_pdu(redacts)
{
if federation {
pdu.sender().server_name() == sender.server_name()
} else {
pdu.sender == sender
}
} else { } else {
pdu.sender == sender false
} }
} else {
false
}
})
.map_err(|_| {
Error::bad_database("Invalid m.room.power_levels event in database")
})
})
// Falling back on m.room.create to judge power levels
.unwrap_or_else(|| {
if let Some(pdu) = self.room_state_get(room_id, &StateEventType::RoomCreate, "")? {
Ok(pdu.sender == sender
|| if let Ok(Some(pdu)) = services().rooms.timeline.get_pdu(redacts) {
pdu.sender == sender
} else {
false
}) })
} else { .map_err(|_| {
Err(Error::bad_database( Error::bad_database("Invalid m.room.power_levels event in database")
"No m.room.power_levels or m.room.create events in database for room", })
)) },
} )
})
} }
} }

View file

@ -338,8 +338,10 @@ impl Service {
.map_err(|_| Error::bad_database("Invalid push rules event in db.")) .map_err(|_| Error::bad_database("Invalid push rules event in db."))
}) })
.transpose()? .transpose()?
.map(|ev: PushRulesEvent| ev.content.global) .map_or_else(
.unwrap_or_else(|| Ruleset::server_default(user)); || Ruleset::server_default(user),
|ev: PushRulesEvent| ev.content.global,
);
let mut highlight = false; let mut highlight = false;
let mut notify = false; let mut notify = false;

View file

@ -581,8 +581,10 @@ impl Service {
) )
.unwrap_or_default() .unwrap_or_default()
.and_then(|event| serde_json::from_str::<PushRulesEvent>(event.get()).ok()) .and_then(|event| serde_json::from_str::<PushRulesEvent>(event.get()).ok())
.map(|ev: PushRulesEvent| ev.content.global) .map_or_else(
.unwrap_or_else(|| push::Ruleset::server_default(userid)); || push::Ruleset::server_default(userid),
|ev: PushRulesEvent| ev.content.global,
);
let unread: UInt = services() let unread: UInt = services()
.rooms .rooms

View file

@ -47,10 +47,10 @@ impl Service {
auth: &AuthData, auth: &AuthData,
uiaainfo: &UiaaInfo, uiaainfo: &UiaaInfo,
) -> Result<(bool, UiaaInfo)> { ) -> Result<(bool, UiaaInfo)> {
let mut uiaainfo = auth let mut uiaainfo = auth.session().map_or_else(
.session() || Ok(uiaainfo.clone()),
.map(|session| self.db.get_uiaa_session(user_id, device_id, session)) |session| self.db.get_uiaa_session(user_id, device_id, session),
.unwrap_or_else(|| Ok(uiaainfo.clone()))?; )?;
if uiaainfo.session.is_none() { if uiaainfo.session.is_none() {
uiaainfo.session = Some(utils::random_string(SESSION_ID_LENGTH)); uiaainfo.session = Some(utils::random_string(SESSION_ID_LENGTH));