diff options
| author | troido <troido@protonmail.com> | 2020-04-06 10:37:53 +0200 |
|---|---|---|
| committer | troido <troido@protonmail.com> | 2020-04-06 10:37:53 +0200 |
| commit | e8d3e3c4f69fc5bab2b32b16b7c8c2c4a8a89a4b (patch) | |
| tree | 67986bb0c0af1abe61dc9846d1a6c8c9b8e2c4b0 /src/roomtemplate.rs | |
| parent | ff457701ff56072914acb8a7160cd02c2a07095a (diff) | |
made parseerrors their own thing
Diffstat (limited to 'src/roomtemplate.rs')
| -rw-r--r-- | src/roomtemplate.rs | 28 |
1 files changed, 14 insertions, 14 deletions
diff --git a/src/roomtemplate.rs b/src/roomtemplate.rs index b5834e9..da4d3a5 100644 --- a/src/roomtemplate.rs +++ b/src/roomtemplate.rs @@ -4,8 +4,8 @@ use serde_json::{json, Value}; use crate::{ Pos, Template, - Result, - aerr + PResult, + perr }; #[derive(Debug, Clone)] @@ -18,39 +18,39 @@ pub struct RoomTemplate { impl RoomTemplate { - pub fn from_json(jsonroom: &Value) -> Result<RoomTemplate>{ + pub fn from_json(jsonroom: &Value) -> PResult<RoomTemplate>{ let size = ( - jsonroom.get("width").ok_or("no with")?.as_i64().ok_or("with not a number")?, - jsonroom.get("height").ok_or("no height")?.as_i64().ok_or("height not a number")? + jsonroom.get("width").ok_or(perr!("no with"))?.as_i64().ok_or(perr!("with not a number"))?, + jsonroom.get("height").ok_or(perr!("no height"))?.as_i64().ok_or(perr!("height not a number"))? ); - let spawn = Pos::from_json(jsonroom.get("spawn").ok_or("no spawn")?).ok_or("spawn not a pos")?; + let spawn = Pos::from_json(jsonroom.get("spawn").ok_or(perr!("no spawn"))?).ok_or(perr!("spawn not a pos"))?; let mut mapping = HashMap::new(); - for (key, value) in jsonroom.get("mapping").ok_or("no mapping")?.as_object().ok_or("mapping not a json object")?.iter() { + for (key, value) in jsonroom.get("mapping").ok_or(perr!("no mapping"))?.as_object().ok_or(perr!("mapping not a json object"))?.iter() { let mut templates: Vec<Template> = Vec::new(); if value.is_array() { - for template in value.as_array().ok_or("weird")? { + for template in value.as_array().unwrap() { templates.push(Template::from_json(template)?); } } else { templates.push(Template::from_json(value)?); } - mapping.insert(key.chars().next().ok_or("mapping key is empty string")?, templates); + mapping.insert(key.chars().next().ok_or(perr!("mapping key is empty string"))?, templates); } let mut field = Vec::new(); field.resize((size.0 * size.1) as usize, Vec::new()); - let jsonfield: &Vec<Value> = jsonroom.get("field").ok_or("no field")?.as_array().ok_or("field not an array")?; + let jsonfield: &Vec<Value> = jsonroom.get("field").ok_or(perr!("no field"))?.as_array().ok_or(perr!("field not an array"))?; // todo: what if size doesn't match actual dimensions for (y, row) in jsonfield.iter().enumerate() { - for (x, ch) in row.as_str().ok_or("field row not a string")?.chars().enumerate() { - field[x + y * (size.0 as usize)] = mapping.get(&ch).ok_or(aerr!("char not found in mapping"))?.clone(); + for (x, ch) in row.as_str().ok_or(perr!("field row not a string"))?.chars().enumerate() { + field[x + y * (size.0 as usize)] = mapping.get(&ch).ok_or(perr!("char not found in mapping"))?.clone(); } } let mut places = HashMap::new(); - for (name, jsonpos) in jsonroom.get("places").unwrap_or(&json!({})).as_object().ok_or("places not an object")? { - places.insert(name.to_string(), Pos::from_json(jsonpos).ok_or("pos of places invalid")?); + for (name, jsonpos) in jsonroom.get("places").unwrap_or(&json!({})).as_object().ok_or(perr!("places not an object"))? { + places.insert(name.to_string(), Pos::from_json(jsonpos).ok_or(perr!("pos of places invalid"))?); } Ok(RoomTemplate { |
