diff options
Diffstat (limited to 'src/worldloader.rs')
| -rw-r--r-- | src/worldloader.rs | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/src/worldloader.rs b/src/worldloader.rs new file mode 100644 index 0000000..6660f9d --- /dev/null +++ b/src/worldloader.rs @@ -0,0 +1,36 @@ + +use std::path::PathBuf; +use std::fs; +use serde_json; +use serde_json::Value; +use crate::{ + RoomId, + roomtemplate::RoomTemplate, + util::Result +}; + + +pub struct WorldLoader { + pub directory: PathBuf, + pub default_room: RoomId +} + +impl WorldLoader { + pub fn new(path: PathBuf, default_room: RoomId) -> Self { + Self { + directory: path, + default_room + } + } + + pub fn load_room(&self, id: RoomId) -> Result<RoomTemplate> { + let mut path = self.directory.clone(); + let fname = id.to_string() + ".json"; + path.push(fname); + println!("PATH: {:?}", path); + let text = fs::read_to_string(path)?; + let json: Value = serde_json::from_str(&text)?; + let template = RoomTemplate::from_json(&json)?; + Ok(template) + } +} |
