io/storage: use fs::create_with_tmpfile() helper

This commit is contained in:
Matthias Schiffer 2023-05-07 16:32:13 +02:00
parent 1abb260997
commit 587db0464c
Signed by: neocturne
GPG key ID: 16EF3F64CB201D9C
2 changed files with 5 additions and 17 deletions

View file

@ -63,19 +63,8 @@ impl<'a> RegionProcessor<'a> {
}
fn save_region(&self, coords: RegionCoords, processed_region: &ProcessedRegion) -> Result<()> {
let tmp_path = self.config.processed_path(coords, true);
storage::write(&tmp_path, processed_region)?;
let output_path = self.config.processed_path(coords, false);
fs::rename(&tmp_path, &output_path).with_context(|| {
format!(
"Failed to rename {} to {}",
tmp_path.display(),
output_path.display(),
)
})?;
Ok(())
storage::write(&output_path, processed_region)
}
fn save_lightmap(&self, coords: RegionCoords, lightmap: &image::GrayAlphaImage) -> Result<()> {

View file

@ -7,21 +7,20 @@ use std::{
use anyhow::{Context, Result};
use serde::{de::DeserializeOwned, Serialize};
use super::fs;
pub fn write<T: Serialize>(path: &Path, value: &T) -> Result<()> {
(|| -> Result<()> {
fs::create_with_tmpfile(path, |file| {
let data = bincode::serialize(value)?;
let len = u32::try_from(data.len())?;
let compressed = zstd::bulk::compress(&data, 1)?;
drop(data);
let mut file = File::create(path)?;
file.write_all(&len.to_be_bytes())?;
file.write_all(&compressed)?;
file.flush()?;
Ok(())
})()
.with_context(|| format!("Failed to write file {}", path.display()))
})
}
pub fn read<T: DeserializeOwned>(path: &Path) -> Result<T> {