summaryrefslogtreecommitdiff
path: root/src/components
diff options
context:
space:
mode:
Diffstat (limited to 'src/components')
-rw-r--r--src/components/equipment.rs29
1 files changed, 6 insertions, 23 deletions
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<Stat, i64>,
pub sprite: Option<Sprite>
}
-impl Equippable {
- pub fn from_json(val: &Value) -> Option<Self> {
- 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::<Option<HashMap<Stat, i64>>>()?,
- sprite: if let Some(spr) = val.get("sprite") {
- Some(Sprite{name: spr.as_str()?.to_string()})
- } else {None}
- })
- }
-}
-
#[derive(Component, Debug, Clone)]