summaryrefslogtreecommitdiff
path: root/src/savestate.rs
diff options
context:
space:
mode:
authortroido <troido@protonmail.com>2020-02-21 17:49:50 +0100
committertroido <troido@protonmail.com>2020-02-21 17:49:50 +0100
commit07cc6d8919193c38cc13b2567ede5a510938db18 (patch)
tree83588f118036fa56905043eb23c5a1d79e0497da /src/savestate.rs
parente69d9c3b5266fd6f9215d1e3f4a761b8027a785c (diff)
players can now go to different rooms
Diffstat (limited to 'src/savestate.rs')
-rw-r--r--src/savestate.rs11
1 files changed, 6 insertions, 5 deletions
diff --git a/src/savestate.rs b/src/savestate.rs
index 8afbbf1..68af12c 100644
--- a/src/savestate.rs
+++ b/src/savestate.rs
@@ -3,6 +3,7 @@ use std::collections::HashMap;
use serde_json::{json, Value};
use crate::Pos;
use crate::template::Template;
+use crate::{Result, aerr};
pub struct SaveState {
pub changes: HashMap<Pos, Vec<Template>>
@@ -25,16 +26,16 @@ impl SaveState {
})
}
- pub fn from_json(val: &Value) -> Option<Self> {
+ pub fn from_json(val: &Value) -> Result<Self> {
let mut changes = HashMap::new();
- for v in val.get("changes")?.as_array()? {
- let pos = Pos::from_json(v.get(0)?)?;
+ for v in val.get("changes").ok_or(aerr!("save does not have changes"))?.as_array().ok_or(aerr!("changes not an array"))? {
+ let pos = Pos::from_json(v.get(0).ok_or(aerr!("change does not have index 0"))?).ok_or(aerr!("change index 0 is not a pos"))?;
let mut templates = Vec::new();
- for t in v.get(1)?.as_array()? {
+ for t in v.get(1).ok_or(aerr!("change does not have index 1"))?.as_array().ok_or(aerr!("change index 1 not an array"))? {
templates.push(Template::from_json(t)?);
}
changes.insert(pos, templates);
}
- Some(Self {changes})
+ Ok(Self {changes})
}
}