layouts: Simplify the main flow of source list

This commit is contained in:
Dorota Czaplejewicz
2020-12-03 16:26:47 +00:00
parent ba2e191918
commit fcd0eaddf2

View File

@ -107,6 +107,7 @@ fn list_layout_sources(
kind: ArrangementKind, kind: ArrangementKind,
keyboards_path: Option<PathBuf>, keyboards_path: Option<PathBuf>,
) -> Vec<LayoutSource> { ) -> Vec<LayoutSource> {
// Just a simplification of often called code.
let add_by_name = | let add_by_name = |
mut ret: Vec<LayoutSource>, mut ret: Vec<LayoutSource>,
name: &str, name: &str,
@ -128,6 +129,20 @@ fn list_layout_sources(
ret ret
}; };
// Another grouping.
let add_by_kind = |ret, name: &str, kind| {
let ret = match kind {
&ArrangementKind::Base => ret,
kind => add_by_name(
ret,
&name_with_arrangement(name.into(), kind),
kind,
),
};
add_by_name(ret, name, &ArrangementKind::Base)
};
fn name_with_arrangement(name: String, kind: &ArrangementKind) -> String { fn name_with_arrangement(name: String, kind: &ArrangementKind) -> String {
match kind { match kind {
ArrangementKind::Base => name, ArrangementKind::Base => name,
@ -138,16 +153,7 @@ fn list_layout_sources(
let ret = Vec::new(); let ret = Vec::new();
// Name as given takes priority. // Name as given takes priority.
let ret = match &kind { let ret = add_by_kind(ret, name, &kind);
ArrangementKind::Base => ret,
kind => add_by_name(
ret,
&name_with_arrangement(name.into(), &kind),
&kind,
),
};
let ret = add_by_name(ret, name, &ArrangementKind::Base);
// Then try non-alternative name if applicable (`us` for `us+colemak`). // Then try non-alternative name if applicable (`us` for `us+colemak`).
let ret = { let ret = {
@ -157,16 +163,7 @@ fn list_layout_sources(
// The name is already equal to base, so it was already added. // The name is already equal to base, so it was already added.
if base == name { ret } if base == name { ret }
else { else {
let ret = match &kind { add_by_kind(ret, base, &kind)
ArrangementKind::Base => ret,
kind => add_by_name(
ret,
&name_with_arrangement(base.into(), &kind),
&kind,
),
};
add_by_name(ret, base, &ArrangementKind::Base)
} }
}, },
// The layout's base name starts with a "+". Weird but OK. // The layout's base name starts with a "+". Weird but OK.
@ -177,17 +174,8 @@ fn list_layout_sources(
} }
}; };
// Finally, fallback name // No other choices left, so give anything.
let ret = match &kind { add_by_kind(ret, FALLBACK_LAYOUT_NAME.into(), &kind)
ArrangementKind::Base => ret,
kind => add_by_name(
ret,
&name_with_arrangement(FALLBACK_LAYOUT_NAME.into(), &kind),
&kind,
),
};
add_by_name(ret, FALLBACK_LAYOUT_NAME, &ArrangementKind::Base)
} }
fn load_layout_data(source: DataSource) fn load_layout_data(source: DataSource)