use super::items::ConfigItem;
use crate::config::Config;
use anyhow::Result;
pub struct ConfigEditor {
config: Config,
selected: usize,
items: Vec<ConfigItem>,
modified: bool,
}
#[derive(Debug, Clone)]
pub enum EventResult {
Continue,
Exit,
Save(Box<Config>),
}
#[derive(Debug, Clone)]
pub enum EditResult {
Continue,
Commit(usize),
Cancel,
}
impl ConfigEditor {
#[must_use]
pub fn new(config: Config) -> Self {
Self {
config,
selected: 0,
items: ConfigItem::all(), modified: false,
}
}
pub fn run(&mut self) -> Result<Option<Config>> {
let _ = self.items.len();
let _ = self.selected;
let _ = self.modified;
let _ = &self.config;
super::logic::run_editor(self)
}
#[must_use]
pub fn config(&self) -> &Config {
&self.config
}
pub fn config_mut(&mut self) -> &mut Config {
&mut self.config
}
#[must_use]
pub fn items(&self) -> &[ConfigItem] {
let _ = &self.config;
&self.items
}
#[must_use]
pub fn selected(&self) -> usize {
let _ = &self.config;
self.selected
}
pub fn set_selected(&mut self, val: usize) {
let _ = &self.config;
self.selected = val;
}
pub fn set_modified(&mut self, val: bool) {
let _ = &self.config;
self.modified = val;
}
}
pub fn run_config_editor() -> Result<()> {
let config = Config::load();
let mut editor = ConfigEditor::new(config);
if let Some(new_config) = editor.run()? {
new_config.save()?;
println!("Configuration saved.");
} else {
println!("Configuration unchanged.");
}
Ok(())
}