From 447a9482fe2c1090403af01d5546b262404620c6 Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Wed, 1 Mar 2023 00:02:23 +0100 Subject: [PATCH] main: create output directory for processed data files --- src/main.rs | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/main.rs b/src/main.rs index 17c3898..cdca041 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,4 +1,7 @@ -use std::path::{Path, PathBuf}; +use std::{ + fs, + path::{Path, PathBuf}, +}; use anyhow::{Context, Result}; use clap::Parser; @@ -9,6 +12,8 @@ use minedmap::{resource, world}; struct Args { /// Minecraft save directory input_dir: PathBuf, + /// MinedMap data directory + output_dir: PathBuf, } type RegionCoords = (i32, i32); @@ -16,12 +21,14 @@ type RegionCoords = (i32, i32); /// Type with methods for processing the regions of a Minecraft save directory struct RegionProcessor { block_types: resource::BlockTypeMap, + processed_dir: PathBuf, } impl RegionProcessor { - fn new() -> Self { + fn new(output_dir: &Path) -> Self { RegionProcessor { block_types: resource::block_types(), + processed_dir: [output_dir, Path::new("processed")].iter().collect(), } } @@ -58,6 +65,13 @@ impl RegionProcessor { .read_dir() .with_context(|| format!("Failed to read directory {}", regiondir.display()))?; + fs::create_dir_all(&self.processed_dir).with_context(|| { + format!( + "Failed to create directory {}", + self.processed_dir.display(), + ) + })?; + for entry in read_dir.filter_map(|entry| entry.ok()).filter(|entry| { // We are only interested in regular files entry @@ -87,7 +101,7 @@ fn main() -> Result<()> { let regiondir: PathBuf = [&args.input_dir, Path::new("region")].iter().collect(); - let region_processor = RegionProcessor::new(); + let region_processor = RegionProcessor::new(&args.output_dir); region_processor.process_region_dir(®iondir)?; Ok(())