aboutsummaryrefslogtreecommitdiff
path: root/server/data
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2025-10-08 23:33:59 +0200
committermetamuffin <metamuffin@disroot.org>2025-10-08 23:33:59 +0200
commitc768cd1240c272dad34f07b09340cfe1d11d67b6 (patch)
tree7a422e56ee6874a44aa5edba018cf0e902058db3 /server/data
parentb8af9f80385fa4d38bc2ac2109250fa9ea2a8080 (diff)
downloadhurrycurry-c768cd1240c272dad34f07b09340cfe1d11d67b6.tar
hurrycurry-c768cd1240c272dad34f07b09340cfe1d11d67b6.tar.bz2
hurrycurry-c768cd1240c272dad34f07b09340cfe1d11d67b6.tar.zst
merge all makefiles into one
Diffstat (limited to 'server/data')
-rw-r--r--server/data/src/index.rs33
1 files changed, 16 insertions, 17 deletions
diff --git a/server/data/src/index.rs b/server/data/src/index.rs
index a5ec8d97..9a44d202 100644
--- a/server/data/src/index.rs
+++ b/server/data/src/index.rs
@@ -23,35 +23,34 @@ use std::{
collections::{HashMap, HashSet},
fs::{File, read_to_string},
path::PathBuf,
- str::FromStr,
- sync::Mutex,
};
use crate::{MapDecl, Serverdata, book::book, build_data};
-#[derive(Debug, Deserialize, Default)]
+#[derive(Debug, Deserialize)]
pub struct DataIndex {
+ #[serde(skip)]
+ pub path: PathBuf,
pub maps: HashMap<String, MapMetadata>,
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 load() -> Result<Self> {
- let mut s = Self::default();
+ pub fn new(path: PathBuf) -> Result<Self> {
+ let mut s = Self {
+ path,
+ maps: HashMap::new(),
+ recipes: HashSet::new(),
+ };
s.reload()?;
Ok(s)
}
pub fn reload(&mut self) -> Result<()> {
- *self = serde_yml::from_reader(File::open(data_dir().join("index.yaml"))?)?;
+ let path = self.path.clone();
+ *self = serde_yml::from_reader(
+ File::open(self.path.join("index.yaml")).context("Failed opening data index")?,
+ )?;
+ self.path = path;
Ok(())
}
@@ -60,14 +59,14 @@ impl DataIndex {
if name.contains("..") || name.starts_with("/") || name.contains("//") {
bail!("illegal map path");
}
- let path = data_dir().join(format!("maps/{name}.yaml"));
+ let path = self.path.join(format!("maps/{name}.yaml"));
Ok(read_to_string(path)?)
}
pub fn read_recipes(&self, name: &str) -> Result<String> {
if !self.recipes.contains(name) {
bail!("unknown recipes: {name:?}");
}
- let path = data_dir().join(format!("recipes/{name}.yaml"));
+ let path = self.path.join(format!("recipes/{name}.yaml"));
Ok(read_to_string(path)?)
}
pub fn generate(&self, map: &str) -> Result<(Gamedata, Serverdata)> {