chore: evaluate error context lazily (#447)

This commit is contained in:
hybo 2023-03-16 17:06:52 +08:00 committed by GitHub
parent 630249d22a
commit 94f647b24a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 14 additions and 11 deletions

View File

@ -138,9 +138,9 @@ impl IProfiles {
let path = dirs::app_profiles_dir()?.join(&file); let path = dirs::app_profiles_dir()?.join(&file);
fs::File::create(path) fs::File::create(path)
.context(format!("failed to create file \"{}\"", file))? .with_context(|| format!("failed to create file \"{}\"", file))?
.write(file_data.as_bytes()) .write(file_data.as_bytes())
.context(format!("failed to write to file \"{}\"", file))?; .with_context(|| format!("failed to write to file \"{}\"", file))?;
} }
if self.items.is_none() { if self.items.is_none() {
@ -207,9 +207,9 @@ impl IProfiles {
let path = dirs::app_profiles_dir()?.join(&file); let path = dirs::app_profiles_dir()?.join(&file);
fs::File::create(path) fs::File::create(path)
.context(format!("failed to create file \"{}\"", file))? .with_context(|| format!("failed to create file \"{}\"", file))?
.write(file_data.as_bytes()) .write(file_data.as_bytes())
.context(format!("failed to write to file \"{}\"", file))?; .with_context(|| format!("failed to write to file \"{}\"", file))?;
} }
break; break;

View File

@ -11,19 +11,21 @@ pub fn read_yaml<T: DeserializeOwned>(path: &PathBuf) -> Result<T> {
} }
let yaml_str = fs::read_to_string(&path) let yaml_str = fs::read_to_string(&path)
.context(format!("failed to read the file \"{}\"", path.display()))?; .with_context(|| format!("failed to read the file \"{}\"", path.display()))?;
serde_yaml::from_str::<T>(&yaml_str).context(format!( serde_yaml::from_str::<T>(&yaml_str).with_context(|| {
"failed to read the file with yaml format \"{}\"", format!(
path.display() "failed to read the file with yaml format \"{}\"",
)) path.display()
)
})
} }
/// read mapping from yaml fix #165 /// read mapping from yaml fix #165
pub fn read_merge_mapping(path: &PathBuf) -> Result<Mapping> { pub fn read_merge_mapping(path: &PathBuf) -> Result<Mapping> {
let mut val: Value = read_yaml(path)?; let mut val: Value = read_yaml(path)?;
val.apply_merge() val.apply_merge()
.context(format!("failed to apply merge \"{}\"", path.display()))?; .with_context(|| format!("failed to apply merge \"{}\"", path.display()))?;
Ok(val Ok(val
.as_mapping() .as_mapping()
@ -45,7 +47,8 @@ pub fn save_yaml<T: Serialize>(path: &PathBuf, data: &T, prefix: Option<&str>) -
}; };
let path_str = path.as_os_str().to_string_lossy().to_string(); let path_str = path.as_os_str().to_string_lossy().to_string();
fs::write(path, yaml_str.as_bytes()).context(format!("failed to save file \"{path_str}\"")) fs::write(path, yaml_str.as_bytes())
.with_context(|| format!("failed to save file \"{path_str}\""))
} }
const ALPHABET: [char; 62] = [ const ALPHABET: [char; 62] = [