summaryrefslogtreecommitdiff
path: root/src/components/interactable.rs
diff options
context:
space:
mode:
authortroido <troido@protonmail.com>2020-04-05 13:19:27 +0200
committertroido <troido@protonmail.com>2020-04-05 13:19:27 +0200
commit84c70cee089b72720a85d285ee0437b65be298b9 (patch)
treecf93ce44eadcb430e1b425a882659303a2b0382d /src/components/interactable.rs
parent068f98cec100772defce8ba966e5b917558b191c (diff)
interactions can have an argument
Diffstat (limited to 'src/components/interactable.rs')
-rw-r--r--src/components/interactable.rs25
1 files changed, 19 insertions, 6 deletions
diff --git a/src/components/interactable.rs b/src/components/interactable.rs
index 3c8f918..a59cc90 100644
--- a/src/components/interactable.rs
+++ b/src/components/interactable.rs
@@ -13,18 +13,31 @@ use crate::{
pub enum Interactable {
Harvest,
Change(Template),
- Say(String)
+ Say(String),
+ Reply(String)
}
+use Interactable::*;
+
impl Interactable {
pub fn from_json(val: &Value) -> Option<Self> {
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()?)),
- "say" => Some(Interactable::Say(arg.as_str()?.to_string())),
- _ => None
+ Some(match typ.as_str()? {
+ "harvest" => Harvest,
+ "change" => Change(Template::from_json(arg).ok()?),
+ "say" => Say(arg.as_str()?.to_string()),
+ "reply" => Reply(arg.as_str()?.to_string()),
+ _ => None?
+ })
+ }
+
+ pub fn accepts_arg(&self, arg: &Option<String>) -> bool {
+ match self {
+ Harvest => arg.is_none(),
+ Change(_) => arg.is_none(),
+ Say(_) => arg.is_none(),
+ Reply(_) => arg.is_some(),
}
}
}