Add remove and erase methods
This commit is contained in:
parent
822473e8e0
commit
be2869bce5
@ -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(())
|
||||
|
Loading…
Reference in New Issue
Block a user