use serde_json::{Value}; use specs::{ Component, HashMapStorage }; use crate::{ Template }; #[derive(Component, Debug, Clone, PartialEq)] #[storage(HashMapStorage)] pub enum Interactable { Harvest, Change(Template) } impl Interactable { pub fn from_json(val: &Value) -> Option { let typ = if val.is_string() {val} else {val.get(0)?}; let arg = if val.is_string() {&Value::Null} else {val.get(1)?}; match typ.as_str()? { "harvest" => Some(Interactable::Harvest), "change" => Some(Interactable::Change(Template::from_json(arg).ok()?)), _ => None } } }