From 5ae2f9040324baaeaed3f91a84662425cb6186dc Mon Sep 17 00:00:00 2001 From: troido Date: Thu, 24 Sep 2020 17:12:39 +0200 Subject: more serde (de)serialisation --- src/components/equipment.rs | 29 ++++++----------------------- 1 file changed, 6 insertions(+), 23 deletions(-) (limited to 'src/components/equipment.rs') diff --git a/src/components/equipment.rs b/src/components/equipment.rs index 0e93902..d87502d 100644 --- a/src/components/equipment.rs +++ b/src/components/equipment.rs @@ -1,6 +1,6 @@ use std::collections::HashMap; -use serde_json::Value; +use serde::{Serialize, Deserialize}; use specs::{ Component, HashMapStorage @@ -10,7 +10,8 @@ use crate::{ }; -#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)] +#[serde(rename_all = "lowercase")] pub enum Slot { Hand, Body, @@ -29,7 +30,8 @@ impl Slot { } -#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)] +#[serde(rename_all = "lowercase")] pub enum Stat { Strength, Defence, @@ -48,32 +50,13 @@ impl Stat { } -#[derive(Debug, Clone, PartialEq)] +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] pub struct Equippable { pub slot: Slot, pub stats: HashMap, pub sprite: Option } -impl Equippable { - pub fn from_json(val: &Value) -> Option { - Some(Equippable{ - slot: Slot::from_str(val.get("slot")?.as_str()?)?, - stats: val - .get("stats")? - .as_object()? - .into_iter() - .map(|(k, v)| - Some((Stat::from_str(k.as_str())?, v.as_i64()?)) - ) - .collect::>>()?, - sprite: if let Some(spr) = val.get("sprite") { - Some(Sprite{name: spr.as_str()?.to_string()}) - } else {None} - }) - } -} - #[derive(Component, Debug, Clone)] -- cgit