layouts: Simplify the main flow of source list
This commit is contained in:
		
							
								
								
									
										50
									
								
								src/data.rs
									
									
									
									
									
								
							
							
						
						
									
										50
									
								
								src/data.rs
									
									
									
									
									
								
							@ -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)
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user