diff --git a/src/mod_config_installer.rs b/src/mod_config_installer.rs index 19402bb..242f063 100644 --- a/src/mod_config_installer.rs +++ b/src/mod_config_installer.rs @@ -7,11 +7,7 @@ use crate::fomod::{ #[derive(Debug)] pub struct InstallerState { - /// Flags set by plugin selections throughout the install flags: HashMap, - - /// Files to install, keyed by destination path. - /// Higher priority value wins when destinations conflict. selected_files: Vec, } @@ -99,6 +95,29 @@ pub struct GroupPrompt { pub options: Vec, } +impl GroupPrompt { + fn new(group: &Group, state: &InstallerState, installed_plugins: &[String]) -> Self { + let options = group + .plugins + .plugin + .iter() + .enumerate() + .map(|(idx, option)| InstallOption { + name: option.name.trim().to_owned(), + option_type: resolve_plugin_type(option, state, installed_plugins), + description: option.description.trim().to_owned(), + idx, + }) + .collect(); + + Self { + name: group.name.clone(), + select_type: group.typ, + options, + } + } +} + pub struct InstallOption { pub name: String, pub option_type: PluginTypeEnum, @@ -112,31 +131,6 @@ impl Display for InstallOption { } } -fn create_group_prompt( - group: &Group, - state: &InstallerState, - installed_plugins: &[String], -) -> GroupPrompt { - let options = group - .plugins - .plugin - .iter() - .enumerate() - .map(|(idx, option)| InstallOption { - name: option.name.trim().to_owned(), - option_type: resolve_plugin_type(option, state, installed_plugins), - description: option.description.trim().to_owned(), - idx, - }) - .collect(); - - GroupPrompt { - name: group.name.clone(), - select_type: group.typ, - options, - } -} - /// Each plugin in the install steps have a type. e.g.: Optional, Required, Recommended /// But the type depends on dependencies /// This function eveluates the plugin type @@ -207,7 +201,7 @@ impl FomodInstaller { for group in &step.optional_file_groups.group { // TODO: Skip groups where all plugins are NotUsable - let prompt = create_group_prompt(group, &state, &self.installed_plugins); + let prompt = GroupPrompt::new(group, &state, &self.installed_plugins); let selected_plugins = (self.group_prompt)(prompt);