diff --git a/libconfig/src/lib.rs b/libconfig/src/lib.rs index 863c1c8..0378e5f 100644 --- a/libconfig/src/lib.rs +++ b/libconfig/src/lib.rs @@ -147,6 +147,87 @@ impl Config { Ok(String::from_utf8(self.read(key)?)?) } + pub fn erase<'b>(&mut self) -> Result<'b, ()>{ + if let Some(fs) = &self.fs { + let root_dir = fs.root_dir(); + + match root_dir.create_file("/CONFIG.TXT") { + Ok(file) => { + file.truncate()?; + }, + Err(e) => { + return Err(Error::IoError(e)); + } + }; + + let dir = root_dir.create_dir("/CONFIG")?; + for r in dir.iter() { + let entry = r?; + if entry.isfile() { + dir.remove(str::from_utf8(entry.short_file_name_as_bytes()).unwrap())?; + } + } + + Ok(()) + } else { + Err(Error::NoConfig) + } + } + pub fn remove_config_txt<'b>(&mut self, key: &str) -> Result<'b, ()>{ + if let Some(fs) = &self.fs { + let root_dir = fs.root_dir(); + + let config_txt_tmp = "/CONFIG.TMP"; + + let mut need_to_rename = false; + match root_dir.open_file("/CONFIG.TXT") { + Ok(file) => { + need_to_rename = true; + let mut file_tmp = root_dir.create_file(config_txt_tmp)?; + file_tmp.truncate()?; + delete_old_entry(key, file, file_tmp)?; + }, + Err(e) => match e.kind() { + ErrorKind::NotFound => {}, + _ => { + return Err(Error::IoError(e)); + } + } + }; + if need_to_rename { + rename_file(&root_dir, config_txt_tmp, "/CONFIG.TXT")?; + } + + Ok(()) + } else { + Err(Error::NoConfig) + } + } + pub fn remove_config_key_bin<'b>(&mut self, key: &str) -> Result<'b, ()>{ + if let Some(fs) = &self.fs { + let root_dir = fs.root_dir(); + + let config_key_bin = &["/CONFIG/", key, ".BIN"].concat(); + + match root_dir.remove(config_key_bin) { + Ok(_) => {}, + Err(e) => match e.kind() { + ErrorKind::NotFound => {}, + _ => { + return Err(Error::IoError(e)); + } + } + }; + + Ok(()) + } else { + Err(Error::NoConfig) + } + } + pub fn remove<'b>(&mut self, key: &str) -> Result<'b, ()>{ + self.remove_config_txt(key)?; + self.remove_config_key_bin(key)?; + } pub fn write_str<'b>(&mut self, key: &str, data: &str) -> Result<'b, ()>{ if let Some(fs) = &self.fs { let root_dir = fs.root_dir(); @@ -172,15 +253,7 @@ impl Config { file.seek(SeekFrom::End(0))?; file.write_all(&["\n", key, "=", data, "\n"].concat().as_bytes())?; - match root_dir.remove(config_key_bin) { - Ok(_) => {}, - Err(e) => match e.kind() { - ErrorKind::NotFound => {}, - _ => { - return Err(Error::IoError(e)); - } - } - }; + self.remove_config_key_bin(key)?; } else { root_dir.create_dir("/CONFIG")?; match root_dir.create_file(config_key_bin) { @@ -193,24 +266,7 @@ impl Config { } }; - let mut need_to_rename = false; - match root_dir.open_file("/CONFIG.TXT") { - Ok(file) => { - need_to_rename = true; - let mut file_tmp = root_dir.create_file(config_txt_tmp)?; - file_tmp.truncate()?; - delete_old_entry(key, file, file_tmp)?; - }, - Err(e) => match e.kind() { - ErrorKind::NotFound => {}, - _ => { - return Err(Error::IoError(e)); - } - } - }; - if need_to_rename { - rename_file(&root_dir, config_txt_tmp, "/CONFIG.TXT")?; - } + self.remove_config_txt(key)?; } Ok(())