mirror of
https://github.com/youwen5/iamb.git
synced 2025-08-04 03:28:28 -07:00
Make merging of configuration options consistent (#471)
This commit is contained in:
parent
fed19d7a4b
commit
0ef5c39f7f
1 changed files with 19 additions and 17 deletions
|
@ -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]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue