mirror of
https://github.com/neocturne/MinedMap.git
synced 2025-03-05 01:24:53 +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<()> {
|
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);
|
let output_path = self.config.processed_path(coords, false);
|
||||||
fs::rename(&tmp_path, &output_path).with_context(|| {
|
storage::write(&output_path, processed_region)
|
||||||
format!(
|
|
||||||
"Failed to rename {} to {}",
|
|
||||||
tmp_path.display(),
|
|
||||||
output_path.display(),
|
|
||||||
)
|
|
||||||
})?;
|
|
||||||
|
|
||||||
Ok(())
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn save_lightmap(&self, coords: RegionCoords, lightmap: &image::GrayAlphaImage) -> Result<()> {
|
fn save_lightmap(&self, coords: RegionCoords, lightmap: &image::GrayAlphaImage) -> Result<()> {
|
||||||
|
|
|
@ -7,21 +7,20 @@ use std::{
|
||||||
use anyhow::{Context, Result};
|
use anyhow::{Context, Result};
|
||||||
use serde::{de::DeserializeOwned, Serialize};
|
use serde::{de::DeserializeOwned, Serialize};
|
||||||
|
|
||||||
|
use super::fs;
|
||||||
|
|
||||||
pub fn write<T: Serialize>(path: &Path, value: &T) -> Result<()> {
|
pub fn write<T: Serialize>(path: &Path, value: &T) -> Result<()> {
|
||||||
(|| -> Result<()> {
|
fs::create_with_tmpfile(path, |file| {
|
||||||
let data = bincode::serialize(value)?;
|
let data = bincode::serialize(value)?;
|
||||||
let len = u32::try_from(data.len())?;
|
let len = u32::try_from(data.len())?;
|
||||||
let compressed = zstd::bulk::compress(&data, 1)?;
|
let compressed = zstd::bulk::compress(&data, 1)?;
|
||||||
drop(data);
|
drop(data);
|
||||||
|
|
||||||
let mut file = File::create(path)?;
|
|
||||||
file.write_all(&len.to_be_bytes())?;
|
file.write_all(&len.to_be_bytes())?;
|
||||||
file.write_all(&compressed)?;
|
file.write_all(&compressed)?;
|
||||||
file.flush()?;
|
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
})()
|
})
|
||||||
.with_context(|| format!("Failed to write file {}", path.display()))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn read<T: DeserializeOwned>(path: &Path) -> Result<T> {
|
pub fn read<T: DeserializeOwned>(path: &Path) -> Result<T> {
|
||||||
|
|
Loading…
Add table
Reference in a new issue