diff options
| author | troido <troido@protonmail.com> | 2020-02-21 17:49:50 +0100 |
|---|---|---|
| committer | troido <troido@protonmail.com> | 2020-02-21 17:49:50 +0100 |
| commit | 07cc6d8919193c38cc13b2567ede5a510938db18 (patch) | |
| tree | 83588f118036fa56905043eb23c5a1d79e0497da /src/savestate.rs | |
| parent | e69d9c3b5266fd6f9215d1e3f4a761b8027a785c (diff) | |
players can now go to different rooms
Diffstat (limited to 'src/savestate.rs')
| -rw-r--r-- | src/savestate.rs | 11 |
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}) } } |
