Make merging of configuration options consistent (#471)

This commit is contained in:
vaw 2025-06-25 20:14:04 +00:00 committed by GitHub
parent fed19d7a4b
commit 0ef5c39f7f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -353,29 +353,31 @@ pub struct UserDisplayTunables {
pub type UserOverrides = HashMap<OwnedUserId, UserDisplayTunables>; pub type UserOverrides = HashMap<OwnedUserId, UserDisplayTunables>;
fn merge_sorts(a: SortOverrides, b: SortOverrides) -> SortOverrides { fn merge_sorts(profile: SortOverrides, global: SortOverrides) -> SortOverrides {
SortOverrides { SortOverrides {
chats: b.chats.or(a.chats), chats: profile.chats.or(global.chats),
dms: b.dms.or(a.dms), dms: profile.dms.or(global.dms),
rooms: b.rooms.or(a.rooms), rooms: profile.rooms.or(global.rooms),
spaces: b.spaces.or(a.spaces), spaces: profile.spaces.or(global.spaces),
members: b.members.or(a.members), members: profile.members.or(global.members),
} }
} }
fn merge_maps<K, V>(a: Option<HashMap<K, V>>, b: Option<HashMap<K, V>>) -> Option<HashMap<K, V>> fn merge_maps<K, V>(
profile: Option<HashMap<K, V>>,
global: Option<HashMap<K, V>>,
) -> Option<HashMap<K, V>>
where where
K: Eq + Hash, K: Eq + Hash,
{ {
match (a, b) { match (global, profile) {
(Some(a), None) => Some(a), (Some(m), None) | (None, Some(m)) => Some(m),
(None, Some(b)) => Some(b), (Some(mut global), Some(profile)) => {
(Some(mut a), Some(b)) => { for (k, v) in profile {
for (k, v) in b { global.insert(k, v);
a.insert(k, v);
} }
Some(a) Some(global)
}, },
(None, None) => None, (None, None) => None,
} }
@ -911,7 +913,7 @@ impl ApplicationSettings {
} }
}; };
let macros = merge_maps(macros, profile.macros.take()).unwrap_or_default(); let macros = merge_maps(profile.macros.take(), macros).unwrap_or_default();
let layout = profile.layout.take().or(layout).unwrap_or_default(); let layout = profile.layout.take().or(layout).unwrap_or_default();
let tunables = global.unwrap_or_default(); let tunables = global.unwrap_or_default();
@ -1110,10 +1112,10 @@ mod tests {
assert_eq!(res, Some(b.clone())); assert_eq!(res, Some(b.clone()));
let res = merge_maps(Some(b.clone()), Some(c.clone())); let res = merge_maps(Some(b.clone()), Some(c.clone()));
assert_eq!(res, Some(c.clone())); assert_eq!(res, Some(b.clone()));
let res = merge_maps(Some(c.clone()), Some(b.clone())); let res = merge_maps(Some(c.clone()), Some(b.clone()));
assert_eq!(res, Some(b.clone())); assert_eq!(res, Some(c.clone()));
} }
#[test] #[test]