From f8364fb636a8e9276939ae8523966b038388e4ff Mon Sep 17 00:00:00 2001 From: troido Date: Wed, 4 Mar 2020 16:10:32 +0100 Subject: added loot/harvest --- src/parameter.rs | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'src/parameter.rs') diff --git a/src/parameter.rs b/src/parameter.rs index 9c72d69..d761331 100644 --- a/src/parameter.rs +++ b/src/parameter.rs @@ -9,7 +9,7 @@ use crate::{ macro_rules! parameters { - ($($name: ident ($typ: ident) $stringname: ident, $v: ident ($fromjson: expr) ($tojson: expr));*;) => { + ($($name: ident ($typ: ty) $stringname: ident, $v: ident ($fromjson: expr) ($tojson: expr));*;) => { #[derive(Debug, PartialEq, Clone)] pub enum Parameter { $( @@ -70,6 +70,11 @@ parameters!( Template (Template) template, v (Template::from_json(v).ok()?) (v.to_json()); Action (ItemAction) action, v (ItemAction::from_json(v)?) (v.to_json()); Bool (bool) bool, v (v.as_bool()?) (json!(v)); + LootList (Vec<(Template, f64)>) lootlist, v + (v.as_array()?.iter().map(|item| + Some((Template::from_json(item.get(0)?).ok()?, item.get(1)?.as_f64()?)) + ).collect::>>()?) + ({json!(v.iter().map(|(t, c)| (t.to_json(), *c)).collect::>())}); ); @@ -80,6 +85,13 @@ impl Parameter { } pub fn guess_from_json(val: &Value) -> Option { + if let Some(arr) = val.as_array() { + if arr.len() == 2 && arr[0].is_string() { + let typestr = arr[0].as_str().unwrap(); + let typ = ParameterType::from_str(typestr)?; + return Self::from_typed_json(typ, &arr[1]); + } + } let typ = if val.is_string() { ParameterType::String -- cgit