summaryrefslogtreecommitdiff
path: root/server/src/data.rs
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/data.rs')
-rw-r--r--server/src/data.rs21
1 files changed, 16 insertions, 5 deletions
diff --git a/server/src/data.rs b/server/src/data.rs
index e980ccbd..e2944e3d 100644
--- a/server/src/data.rs
+++ b/server/src/data.rs
@@ -25,7 +25,9 @@ use serde::{Deserialize, Serialize};
use std::{
collections::{HashMap, HashSet},
fs::File,
- sync::RwLock,
+ path::PathBuf,
+ str::FromStr,
+ sync::{Mutex, RwLock},
};
#[derive(Debug, Deserialize, Serialize, Clone, Copy, Default)]
@@ -104,9 +106,18 @@ pub struct DataIndex {
pub recipes: HashSet<String>,
}
+pub static DATA_DIR: Mutex<Option<PathBuf>> = Mutex::new(None);
+fn data_dir() -> PathBuf {
+ DATA_DIR
+ .lock()
+ .unwrap()
+ .to_owned()
+ .unwrap_or_else(|| PathBuf::from_str("data").unwrap())
+}
+
impl DataIndex {
pub fn reload(&mut self) -> anyhow::Result<()> {
- *self = serde_yaml::from_reader(File::open("data/index.yaml")?)?;
+ *self = serde_yaml::from_reader(File::open(data_dir().join("index.yaml"))?)?;
Ok(())
}
@@ -127,9 +138,9 @@ impl DataIndex {
bail!("unknown recipes: {recipes:?}");
}
- let demands_path = format!("data/demands/{demands}.yaml");
- let map_path = format!("data/maps/{map}.yaml");
- let recipes_path = format!("data/recipes/{recipes}.yaml");
+ let demands_path = data_dir().join(format!("demands/{demands}.yaml"));
+ let map_path = data_dir().join(format!("maps/{map}.yaml"));
+ let recipes_path = data_dir().join(format!("recipes/{recipes}.yaml"));
let demands_in = serde_yaml::from_reader(File::open(demands_path).unwrap()).unwrap();
let map_in = serde_yaml::from_reader(File::open(map_path).unwrap()).unwrap();