summaryrefslogtreecommitdiff
path: root/src/oldassemblage.rs
diff options
context:
space:
mode:
authortroido <troido@protonmail.com>2020-02-07 14:08:18 +0100
committertroido <troido@protonmail.com>2020-02-07 14:08:18 +0100
commit70db58f688f0dbdd69231da570cf8dbb54e5ca81 (patch)
treeab8d61357f17ebd30c15e7206dde110da0fd1579 /src/oldassemblage.rs
parent45ed2cd201c79fae1c61a4f6f2982a9f5cfbceca (diff)
named stuff properly; added encyclopedia and template
Diffstat (limited to 'src/oldassemblage.rs')
-rw-r--r--src/oldassemblage.rs63
1 files changed, 63 insertions, 0 deletions
diff --git a/src/oldassemblage.rs b/src/oldassemblage.rs
new file mode 100644
index 0000000..a81ce82
--- /dev/null
+++ b/src/oldassemblage.rs
@@ -0,0 +1,63 @@
+
+
+use std::any::Any;
+
+
+#[macro_export]
+macro_rules! assemblage {
+ ($name:ident { $($arg:ident : $argt:ident ),* } ; $( $comp:expr ),* ) => {
+ #[derive(Debug, Clone, Default)]
+ pub struct $name {$(
+ pub $arg : $argt
+ )* }
+ impl Assemblage for $name {
+ fn build<'a>(&self, mut builder: specs::EntityBuilder<'a>) -> specs::EntityBuilder<'a>{
+ $(
+ let $arg = &self.$arg;
+ )*
+ $(
+ builder = specs::Builder::with(builder, $comp);
+ )*
+ builder
+ }
+
+ #[allow(unused_variables, unused_mut)]
+ fn init_from_json(&mut self, mut args: Vec<serde_json::Value>, kwargs: std::collections::HashMap<String, serde_json::Value>) {
+ $(
+ if args.len() > 0 {
+ let val = args.remove(0);
+ if let Some(actual_val) = super::unpack_json!($argt, val) {
+ self.$arg = actual_val;
+ }
+ }
+ )*
+ $(
+ if let Some(val) = kwargs.get(stringify!($arg)) {
+ if let Some(actual_val) = super::unpack_json!($argt, val) {
+ self.$arg = actual_val;
+ }
+ }
+ )*
+ }
+ }
+ }
+}
+
+#[macro_export]
+macro_rules! unpack_json {
+ (String, $val: ident) => {
+ if let Some(txt) = $val.as_str(){
+ Some(txt.to_string())
+ } else {
+ None
+ }
+ }
+}
+
+
+pub trait Assemblage: Send + Sync + Any {
+ fn build<'a>(&self, builder: specs::EntityBuilder<'a>) -> specs::EntityBuilder<'a>;
+ fn init_from_json(&mut self, args: Vec<serde_json::Value>, kwargs: std::collections::HashMap<String, serde_json::Value>);
+}
+
+