mirror of
https://github.com/neocturne/MinedMap.git
synced 2025-03-04 17:23:33 +01:00
io/storage: use fs::create_with_tmpfile() helper
This commit is contained in:
parent
1abb260997
commit
587db0464c
2 changed files with 5 additions and 17 deletions
|
@ -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<()> {
|
||||
|
|
|
@ -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> {
|
||||
|
|
Loading…
Add table
Reference in a new issue