diff options
Diffstat (limited to 'src/worldloader.rs')
| -rw-r--r-- | src/worldloader.rs | 33 |
1 files changed, 7 insertions, 26 deletions
diff --git a/src/worldloader.rs b/src/worldloader.rs index c8738e2..75465bb 100644 --- a/src/worldloader.rs +++ b/src/worldloader.rs @@ -1,9 +1,8 @@ use std::path::{PathBuf}; use std::fs; -use serde_json; -use serde_json::Value; -use serde::Deserialize; +use json5; +use serde::{Serialize, Deserialize}; use crate::{ RoomId, roomtemplate::RoomTemplate, @@ -27,41 +26,22 @@ impl WorldLoader { pub fn load_world_meta(&self) -> Result<WorldMeta> { let path = self.directory.join("world.json"); let text = fs::read_to_string(path)?; - let json: Value = serde_json::from_str(&text)?; - let default_room = RoomId::deserialize( - json.get("default_room").ok_or(aerr!("world meta does not have default_room"))? - ).map_err(|e| aerr!("invalid roomid for default room: {}", e))?; - let encyclopediae = - json - .get("encyclopediae") - .ok_or(aerr!("world meta does not have encyclopediae"))? - .as_array() - .ok_or(aerr!("world meta encyclopediae is not a list"))? - .iter() - .map(|v| Ok(v - .as_str() - .ok_or(aerr!("world meta encyclopediae item {:?} is not a string", v))? - .to_string() - )) - .collect::<Result<Vec<String>>>()?; - Ok(WorldMeta{ - default_room, - encyclopediae - }) + let meta = json5::from_str(&text)?; + Ok(meta) } pub fn load_room(&self, id: RoomId) -> Result<RoomTemplate> { let fname = id.to_string().splitn(2, '+').next().unwrap().to_string() + ".json"; let path = self.directory.join("maps").join(fname); let text = fs::read_to_string(path)?; - let template = serde_json::from_str(&text)?; + let template = json5::from_str(&text)?; Ok(template) } pub fn load_encyclopedia(&self, name: &str) -> Result<Encyclopedia> { let fname: String = name.to_string() + ".json"; let encyclopedia: Encyclopedia = - serde_json::from_str( + json5::from_str( &fs::read_to_string( self.directory .join("encyclopediae") @@ -73,6 +53,7 @@ impl WorldLoader { } } +#[derive(Debug, PartialEq, Eq, Clone, Serialize, Deserialize)] pub struct WorldMeta { pub encyclopediae: Vec<String>, pub default_room: RoomId |
