use std::collections::HashMap; use serde_json::{json, Value, value}; use crate::{ Pos, Template, PResult, perr, resources::RoomPermissions }; #[derive(Debug, Clone)] pub struct RoomTemplate { pub size: (i64, i64), pub spawn: Pos, pub field: Vec>, pub places: HashMap, pub permissions: RoomPermissions } impl RoomTemplate { pub fn from_json(jsonroom: &Value) -> PResult{ let size = ( jsonroom.get("width").ok_or(perr!("no width"))?.as_i64().ok_or(perr!("width 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(perr!("no spawn"))?).ok_or(perr!("spawn not a pos"))?; let mut mapping = HashMap::new(); 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