♻️ refactor(config): use string keys for rules in config
- changed the type of the key used in the rules BTreeMap from usize to String - this change makes it easier to serialize and deserialize the configuration - updated the remove_rule_by_id and remove_rule_by_label functions to use string keys
This commit is contained in:
committed by
Jeremiah Russell
parent
6dc425ebec
commit
e24d8b1e47
@@ -17,7 +17,7 @@ use crate::{Error, MessageAge, Retention, eol_cmd::EolAction};
|
|||||||
#[derive(Debug, Serialize, Deserialize)]
|
#[derive(Debug, Serialize, Deserialize)]
|
||||||
pub struct Config {
|
pub struct Config {
|
||||||
credentials: Option<String>,
|
credentials: Option<String>,
|
||||||
rules: BTreeMap<usize, EolRule>,
|
rules: BTreeMap<String, EolRule>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Default for Config {
|
impl Default for Config {
|
||||||
@@ -83,7 +83,7 @@ impl Config {
|
|||||||
rule.set_command(EolAction::Delete);
|
rule.set_command(EolAction::Delete);
|
||||||
}
|
}
|
||||||
log::info!("added rule: {rule}");
|
log::info!("added rule: {rule}");
|
||||||
self.rules.insert(rule.id(), rule);
|
self.rules.insert(rule.id().to_string(), rule);
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -108,7 +108,7 @@ impl Config {
|
|||||||
|
|
||||||
/// Remove a rule by the ID specified
|
/// Remove a rule by the ID specified
|
||||||
pub fn remove_rule_by_id(&mut self, id: usize) -> crate::Result<()> {
|
pub fn remove_rule_by_id(&mut self, id: usize) -> crate::Result<()> {
|
||||||
self.rules.remove(&id);
|
self.rules.remove(&id.to_string());
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
@@ -126,7 +126,7 @@ impl Config {
|
|||||||
return Err(Error::NoRuleFoundForLabel(label.to_string()));
|
return Err(Error::NoRuleFoundForLabel(label.to_string()));
|
||||||
}
|
}
|
||||||
|
|
||||||
self.rules.remove(&rule_id);
|
self.rules.remove(&rule_id.to_string());
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
@@ -150,8 +150,12 @@ impl Config {
|
|||||||
.join(home_dir)
|
.join(home_dir)
|
||||||
.join(".cull-gmail/cull-gmail.toml");
|
.join(".cull-gmail/cull-gmail.toml");
|
||||||
|
|
||||||
if let Ok(output) = toml::to_string(self) {
|
let res = toml::to_string(self);
|
||||||
fs::write(path, output)?;
|
log::trace!("toml conversion result: {res:#?}");
|
||||||
|
|
||||||
|
if let Ok(output) = res {
|
||||||
|
fs::write(&path, output)?;
|
||||||
|
log::trace!("Config saved to {}", path.display());
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
@@ -163,6 +167,7 @@ impl Config {
|
|||||||
let path = PathBuf::new()
|
let path = PathBuf::new()
|
||||||
.join(home_dir)
|
.join(home_dir)
|
||||||
.join(".cull-gmail/cull-gmail.toml");
|
.join(".cull-gmail/cull-gmail.toml");
|
||||||
|
log::trace!("Loading config from {}", path.display());
|
||||||
|
|
||||||
let input = read_to_string(path)?;
|
let input = read_to_string(path)?;
|
||||||
let config = toml::from_str::<Config>(&input)?;
|
let config = toml::from_str::<Config>(&input)?;
|
||||||
|
|||||||
Reference in New Issue
Block a user